Scientific measurement library for instruments, experiments, and live-plotting

Overview

PyMeasure Scientific package

PyMeasure scientific package

PyMeasure makes scientific measurements easy to set up and run. The package contains a repository of instrument classes and a system for running experiment procedures, which provides graphical interfaces for graphing live data and managing queues of experiments. Both parts of the package are independent, and when combined provide all the necessary requirements for advanced measurements with only limited coding.

PyMeasure is currently under active development, so please report any issues you experience to our Issues page.

PyMeasure runs on Python 3.7-3.10, and is tested with continous-integration on Linux, macOS, and Windows.

Documentation Status

Quick start

Check out the documentation for the quick start guide, that covers the installation of Python and PyMeasure.

There are a number of examples in the examples directory that can help you get up and running.

Comments
  • Harmonise instrument name definition pattern, consistently name the instrument connection argument

    Harmonise instrument name definition pattern, consistently name the instrument connection argument "adapter"

    Fixes #658 and adjustes the documentation accordingly.

    • [x] Verify that the whole adding_instruments documentation is up to date.
    • [x] Create a follow up Issue for changing all instruments. (correct the super invocation in Keysight N7776, LakeShore421), maybe together with the change to a "SCPI" mixin.
    opened by bmoneke 63
  • Channel implementation added.

    Channel implementation added.

    Fixes #616 which complains about missing Channel implementation.

    I'm done with the basic implementation:

    • Creation of some Base class (name is open for suggestions), which contains properties and methods which work inside the class itself (values, ask...).
    • Instrument is based on this Base and calls the adapter.
    • The Channel (maybe a different name, I made it similar to Instrument) calls the instrument's methods (instead of adapter) and write uses str.format to replace '{ch}' in a command with the channel name. I figured, this is the most common use case for a channel. If the command does not contain that variable, it is used 'as is'.

    Documentation (docstring, and documentation proper, including example) and tests are not yet done.

    ToDos after the implementation itself is done:

    • [x] Write proper documentation (including protected "channels"). Example how to add "special" channels, how to always prepend Channel name... You can use Channel.control etc.
    • [x] You should use the default prefix and "collection" name, unless you have several different ones. Always use asd_child
    • [x] Add a remark in changelog about protected "channels" and "ch_{ch}"
    • [x] Reorder the tests according to the split file.
    • [x] ensure everything from #364 is done
    • [x] add remove_child
    • [x] put the formatting in its own method
    • [x] add channel descriptors in order to define the children at class level.
    • [x] protect auto created children.
    • [x] Adjust the AWG to the code.
    • [x] Tests for setup methods (if they remain)
    • [x] create an issue to change instruments to this new implementation.

    Closes #364

    opened by bmoneke 56
  • [discussion] InstrumentKit

    [discussion] InstrumentKit

    Hello pymeasure devs,

    I just wanted to take the time to bring a similar project to your attention, InstrumentKit, which I started several years ago with similar goals. Our code architecture actually looks surprisingly similar, so IK shouldn't be too foreign.

    A few things that you will notice that IK has are handling of unitful quantities, extensive test coverage, and additional connection interfaces one can use.

    I hope that we can learn from each other so that we can continue to help the instrumentation community.

    help wanted question 
    opened by scasagrande 56
  • Adapter rework

    Adapter rework

    Reworking the instrument/adapter. This pull request just focuses on the official adapters, Instrument class and keeping the code base in a working condition.

    Fixes #567, fixes #512, fixes #409, fixes #219.

    Roadmap of different parts (PRs)

    1. Preliminary tests of instruments/adapters in the current state #665
    2. This pull request with changes to the official adapters and minimum changes to the instruments to use these
    3. A test code generator.
    4. Pull requests for changes in individual instruments (removing custom adapters, where applicable)

    Open questions

    • [x] move read/write binary_values to adapter or instrument?
    • [x] query_delay in instrument.ask or should the instrument replace ask adding its own delay method if necessary?
    • [x] remove FakeAdapter or is there any use for it, having implemented the Protocol adapter?
    • [x] Deprecate the vxi11 adapter in favour of pyvisa?
    • [x] make SerialAdapter similar to pyvisa: timeout in ms? Or both in s?

    Adapter rework

    General

    • [x] Write tests for instruments to be changed. (tests using devices are called test_instrument_with_device.py : add appropriate comment into documentation)
    • [x] Harmonise ask being write+read (i.e., remove from VISAAdapter), use protocol tests to confirm it works correctly
    • [x] Implement waiting in Instrument.ask. time.sleep(0) takes 0.5 µs.
    • [x] Remove all now-unnecessary ask() implementations, read and write implementations should have all (test this)
    • [x] Implement over-the-wire message-traffic logging here (protocol.py), first
    • [x] Check timing impact of non-firing logging messages: less then 0.5 µs
    • [x] Roll out message-traffic logging to all Adapters, try to DRY
    • [x] adjust tests if instruments got changed (especially those with their own adapter.
    • [x] check newly added instruments
    • [x] Include a test generator which generates tests out of device communication
    • [x] Adjust the documentation: All protocol quirks are in read/write. Timing issues in ask (defaults to write + wait + read). Remove the "custom adapters in init" examples from the "connecting.rst". It's better to adjust read than to write your own adapter. If you need a special adapter, check, whether an adapter had been handed over first (for example for protocol_tests).
    • [x] Document how Adapters work and why only the the private methods should be overridden.
    • [x] Add a remark in changes.rst

    Official adapters

    • [x] prologix adapter: remove rw_delay
    • [x] Adapter: Add adapter.close
    • [x] Can pyvisa replace telnet or change to another option (telnetlib3...) as telnetlib is deprecated PEP 594
    • [x] Can Prologix be based on pyvisa?
    • [x] deprecate vxi11 in favour of pyvisa?

    Instruments and special adapters

    Special Adapters ensure, that they work with the modified adapters

    • [x] attocube and anc300
    • [x] danfysik and danfysik8500: should be removable, verify, that it works as expected.
    • [x] lakeshore: could be moved to pyvisa, I guess
    • [x] Oxford Adapter: move it to its own superclass between Instrument and the specific instrument itself. (later)
    • [x] Toptica (later)

    Test special adapters change

    • [x] attocube
    • [x] danfysik
    • [x] lakeshore

    Rewrite instruments communication (read/write...) to adapt to these changes

    • [x] anaheim.dpseries
    • [x] fwbell.fwbell5080 move to normal instrument, implementation itself is broken
    • [x] hcp.TC038
    • [x] hp.hp8116a uses read_stb, assert_trigger, clear...
    • [x] oxfordinstruments: see its own adapter
    • [x] parker.parkerGV6 move to normal instrument (using pyvisa as default), see also https://github.com/pymeasure/pymeasure/discussions/620 and the following issue https://github.com/pymeasure/pymeasure/issues/623
    • [x] activetechnologies/AWG401x rewrite write_binary_values

    Verify rewritten instruments

    • [x] anaheim.dpseries
    • [x] fwbell.fwbell5080
    • [x] hcp.TC038
    • [x] hp.hp8116a
    • [x] oxfordinstruments: see its own adapter
    • [x] parker.parkerGV6
    • [x] activetechnologies/AWG401x

    Small adjustments (change adapter calls to instrument calls)

    • [x] agilent/agilentB1500
    • [x] anritsu/anritsuMS9710C
    • [x] heidenhain/nd287
    • [x] anritsu/anritsuMS9710C
    • [x] hcp.TC038D
    • [x] keysight.keysightN7776C
    • [x] lakeshore.lakeshore421
    • [x] srs.sr860
    • [x] hp.hplegacyinstrument
    • [x] hp.hpsystempsu
    • [x] hp.hp3437A

    Verify adjusted instruments

    • [x] agilent/agilentB1500
    • [x] anritsu/anritsuMS9710C
    • [x] heidenhain/nd287
    • [x] anritsu/anritsuMS9710C
    • [x] hcp.TC038D
    • [x] keysight.keysightN7776C
    • [x] lakeshore.lakeshore421
    • [x] srs.sr860
    • [x] hp.hplegacyinstrument
    • [x] hp.hpsystempsu
    • [x] hp.hp3437A

    Check newly added / modified instruments

    Clean up

    • [x] remove notes from protocol.py, adapter.py
    • [x] clean commented code from instruments transitioned to the new style

    Issues and discussions

    • https://github.com/pymeasure/pymeasure/issues/567 Main issue
    • https://github.com/pymeasure/pymeasure/issues/512 contains more connected issues
    • https://github.com/pymeasure/pymeasure/issues/409
    • https://github.com/pymeasure/pymeasure/issues/506 Regarding thread-safety and its difficulties. Questionable whether it should be included here
    • https://github.com/pymeasure/pymeasure/issues/219
    opened by bmoneke 48
  • Adapter and Instrument methods

    Adapter and Instrument methods

    As highlighted in https://github.com/pymeasure/pymeasure/pull/559#discussion_r780658782 by @CodingMarco, there could be some design issue in the way Instrument and Adapter class implement some methods. In particular, values and ask methods implemented in Adapter class are simply calling other methods or making text processing which has nothing to do with low level instrument access. This requires, in certain circumstances, to reimplement them at Instrument class level even though no changes are needed. A possible solution is to move the default implementation of these methods from Adapter to Instrument

    enhancement instrument 
    opened by msmttchr 30
  • Allow passing serial parameters to PyVISA through PyVisaAdapter?

    Allow passing serial parameters to PyVISA through PyVisaAdapter?

    I'm trying to control an instrument through PyMeasure which uses a rather unorthodox serial setup: 57600 baud, 7 data bits, 1 stop bit, odd parity. All these settings are kwargs for PyVisa's get_instrument / open_resource but are not permitted by safeKeywords in visa.py. I ended up hacking my local copy of the library to validate that adding them to safeKeywords works.

    Is there any compelling reason not to allow these keyword args, since they make it possible to configure more instruments?

    enhancement documentation instrument 
    opened by alterscape 27
  • Can not perform basic math operations on Parameters

    Can not perform basic math operations on Parameters

    I am getting strange errors when trying to perform math on Parameters.

    • When trying to do basic mathematical operations with a Parameter and a built in Python data type I get a TypeError: unsupported operand type(s).
    • When trying to use parameter.value in the math I get the error AttributeError: 'float' object has no attribute 'value'
    class My_Procedure( Procedure ):
        f_param = FloatParameter( 'Float Parameter',   default = 0 )
        g_param = FloatParameter( 'Another Float Parameter',   default = 0 )
    
        def math( self ):
            total = self.f_param + self.g_param  # no error
    
            res_1 = 1* self.f_param  # TypeError: unsupported operand type(s) for *: 'int' and 'FloatParameter'
            
            f_val = self.f_param.value  # no error
            res_2 = 1* self.f_param.value  # AttributeError: 'float' object has no attribute 'value'
    
    opened by bicarlsen 25
  • Added dynamic property support

    Added dynamic property support

    A new class DynamicProperty is introduced to support dynamic change of control/measurement/setting parameters both at subclass level and at instance level

    opened by msmttchr 24
  • Forking/Pickling issue when worker.start() is called?!

    Forking/Pickling issue when worker.start() is called?!

    Using the ManagedWindow class, I can add experiments to the queue. However, once they should "start" (i.e. the next() method is used) the whole .py file gets interpreted again instead.

    In the debugger I traced it down to a new thread being started when the worker is started. When Manager.next._worker.start() is called). Due to the error message below my best guess is, that it has something to do with the forking/pickling issue(s). Since I have no clue about multi-threading, I hope someone can help me fix this.

    image

    opened by JuMaD 24
  • Channel of Instrument does not use overwritten Instrument methods

    Channel of Instrument does not use overwritten Instrument methods

    I am implementing another device driver based on pymeasure's Instrument and run into an issue. The device uses messages based on binary code for communication. I have overwritten Instrument.read/write/values to work with binary messages. This all works great. For a set of properties, it seemed useful to use the Channel framework.

    Using Channels, however, seems to not use all the overwritten methods. In particular my custom values method is not used. I have prepared a minimal working example where the test framework nicely illustrates the problem.

    The Instrument code and test file can be found at https://gist.github.com/dkriegner/7af08dc78fdd1461125e079670675bcf

    The test_prop succeeds as expected, while testing the same property via a channel fails because CommonBase.values seems to be used (the string conversion causes the problem).

        def test_prop_channel():
            """Verify the processing the load capacity property via Channel"""
            with expected_protocol(
                DKTest,
                [(b'A', b'\x01'), ],
            ) as inst:
    >           assert inst.ch_1.prop == 1
    E           assert "b'\\x01'" == 1
    

    Is it wrong to expect that with Channels I can still overwrite the values method?

    My WIP code for the real device can be found in my fork, but its not ready and lots of other things issue the problem there.

    opened by dkriegner 23
  • LeCroy T3DSO1204 Oscilloscope

    LeCroy T3DSO1204 Oscilloscope

    This implements a device of a new vendor: LeCroy/Teledyne T3DSO1204 Oscilloscope.

    Connection to the device is made through an TCP or USB connection.

    I based the pymeasure.instruments.lecroy.LeCroyT3DSO1204 on the pymeasure.instruments.keysight.KeysightDSOX1102G but I added many functions, in particular related to the trigger.

    I strived for 100% test coverage. However, to run the tests you need the hardware.

    opened by LastStarDust 23
  • Move coordinates label to the pyqtgraph PlotItem

    Move coordinates label to the pyqtgraph PlotItem

    In order to save room in the plotwidget (especially relevant for widgets such as the DockWidget that houses multiple PlotWidgets) I here propose to make the coordinates label (now positioned just below the PlotItem in a separate, otherwise empty, VBoxLayout) a part of the PlotItem.

    opened by CasperSchippers 0
  • Critical Bug:  Use of %f instead of %e for values truncates values

    Critical Bug: Use of %f instead of %e for values truncates values

    Hey, I've been working with this library for a while using the DSOX1102G I noticed that once I use a value smaller than 1e-6, the scope does not receive it correctly and uses the smallest value possible.

    This issue occurs as the python default %f max decimal points is 6: image

    The more concise solution would be to use %e which is always supported by SCPI devices: image

    Looking at the repo there are about 19 devices use %f and not %e

    This is uncaught by testing as it was never tested for.

    bug 
    opened by maor1993 7
  • Remove Toptica adapter

    Remove Toptica adapter

    Remove the Toptica Adapter and make the ibeamSmart depending on the VISAAdapter alone. Takes hints from original PR #352 and the new issue #816.

    The tests require empty strings, which are added to the ProtocolAdapter in #818

    I added a few tests from the examples @dkriegner gave in #352.

    opened by bmoneke 0
  • Toptica iBeamSmart issue

    Toptica iBeamSmart issue

    #instrument

    While some basic functionality is implemented, there is an issue with writing. The laser sends a prompt, to indicate that it is ready for writing as a handshake:

    CMD>
    

    Currently, read is implemented to wait for just [OK].

    I would be happy to make a PR, but first need to better understand the pymeasure philosophy. I see a few options where to put this:

    • in a State (e.g., ready for write) +
    • in read
    • in write

    Does anybody have some guidance?

    Thanks Sam

    opened by waveman68 4
  • Discourage the use of direct setting of interface specific properties in Instruments

    Discourage the use of direct setting of interface specific properties in Instruments

    Directly setting interface specific communication parameters as suggested in the documentation in the Single Interface section:

    e.g.:

    def __init__(self, adapter, name="Extreme 5000", baud_rate=2400, **kwargs):
        super().__init__(
            adapter,
            name,
            baud_rate=baud_rate,
            **kwargs
        )
    

    leads to the disadvantage that this device can only be used with this particular connection. Even if a device might offer only a specific hardware interface many transparent converters exist (e.g. RS232 to Ethernet) which can make the device visible at the control computer under a different interface.

    With the VisaAdapter one would only need to change the resource name and a connection would be possible if the syntax proposed in the multiple interfaces section of the documentation is used.

    For the example above, this would mean:

    def __init__(self, adapter, name="Extreme 5000", baud_rate=2400, **kwargs):
        super().__init__(
            adapter,
            name,
            asrl={'baud_rate': baud_rate},
            **kwargs
        )
    

    I therefore would propose to discourage using the "single interface" way and thereby allow the user to use hardware adapters more easily.

    In particular for serial device communication I could anyhow only find the LakeShore421 device which uses the "single interface"-way

    Other solutions: @bmoneke pointed out in #800 that a user can always specify an Adapter and therefore also the single interface implementation would allow to be used with communication Adapters. While this is true, it requires the user to reapply all other default parameters like read/write_termination, timeout, ... which typically are unchanged if a transparent converter is used.

    opened by dkriegner 1
  • Split `values` into messaging and formatting

    Split `values` into messaging and formatting

    In #784 the question arose, how to modify the message formatting (due to a binary protocol) of values while keeping the messaging (ask of the instrument or channel, respectively).

    Some parts of the message formatting of values may cause problems. For example the stripping of white space chars may corrupt a binary string, as a byte might have the value of a white space char by chance.

    An instrument and a channel use different ask methods (either through the adapter or the instrument), therefore, the values methods have to be different too.

    Several solutions were discussed in #784. For example values could be split in a messaging part (ask) and a formatting part (the rest).

    enhancement instrument discussion-needed 
    opened by bmoneke 0
Releases(v0.11.1)
  • v0.11.1(Dec 31, 2022)

    Version 0.11.1 (2022-12-31)

    Adapter and instrument mechanics

    • Fix broken PrologixAdapter.gpib. Due to a bug in VISAAdapter, you could not get a second adapter with that connection (#765).

    Full Changelog: https://github.com/pymeasure/pymeasure/compare/v0.11.0...v0.11.1

    Source code(tar.gz)
    Source code(zip)
  • v0.11.0(Nov 19, 2022)

    Version 0.11.0 (2022-11-19)

    Main items of this new release:

    • 11 new instrument drivers have been added
    • A method for testing instrument communication without hardware present has been added, see the documentation.
    • The separation between Instrument and Adapter has been improved to make future modifications easier. Adapters now focus on the hardware communication, and the communication protocol should be defined in the Instruments. Details in a section below.
    • The GUI is now compatible with Qt6.
    • We have started to clean up our API in preparation for a future version 1.0. There will be deprecations and subsequent removals, which will be prominently listed in the changelog.

    Deprecated features

    In preparation for a stable 1.0 release and a more consistent API, we have now started formally deprecating some features. You should get warnings if those features are used.

    • Adapter methods ask, values, binary_values, use Instrument methods of the same name instead.
    • Adapter parameter preprocess_reply, override Instrument.read instead.
    • Adapter.query_delay in favor of Instrument.wait_for().
    • Keithley 2260B: enabled property, use output_enabled instead.

    New adapter and instrument mechanics

    • Nothing should have changed for users, this section is mainly interesting for instrument implementors.
    • Documentation in 'Advanced communication protocols' in 'Adding instruments'.
    • Adapter logs written and read messages.
    • Particular adapters (VISAAdapter etc.) implement the actual communication.
    • Instrument.control getter calls Instrument.values.
    • Instrument.values calls Instrument.ask, which calls Instrument.write, wait_for, and read.
    • All protocol quirks of an instrument should be implemented overriding Instrument.write and read.
    • Instrument.wait_until_read implements waiting between writing and reading.
    • reading/writing binary values is in the Adapter class itself.
    • PrologixAdapter is now based on VISAAdapter.
    • SerialAdapter improved to be more similar to VISAAdapter: read/write use strings, read/write_bytes bytes. - Support for termination characters added.

    Instruments

    • New Active Technologies AWG-401x (@garzetti, #649)
    • New Eurotest hpp_120_256_ieee (@sansanda, #701)
    • New HC Photonics crystal ovens TC038, TC038D (@bmoneke, #621, #706)
    • New HP 6632A/6633A/6634A power supplies (@LongnoseRob, #651)
    • New HP 8657B RF signal generator (@LongnoseRob, #732)
    • New Rohde&Schwarz HMP4040 power supply. (@bleykauf, #582)
    • New Siglent SPDxxxxX series Power Supplies (@AidenDawn, #719)
    • New Temptronic Thermostream devices (@mroeleke, #368)
    • New TEXIO PSW-360L30 Power Supply (@LastStarDust, #698)
    • New Thermostream ECO-560 (@AidenDawn, #679)
    • New Thermotron 3800 Oven (@jcarbelbide, #606)
    • Harmonize instruments' adapter argument (@bmoneke, #674)
    • Harmonize usage of shutdown method (@LongnoseRob, #739)
    • Rework Adapter structure (@bmoneke, #660)
    • Add Protocol tests without hardware present (@bilderbuchi, #634, @bmoneke, #628, #635)
    • Add Instruments and adapter protocol tests for adapter rework (@bmoneke, #665)
    • Add SR830 sync filter and reference source trigger (@AsafYagoda, #630)
    • Add Keithley6221 phase marker phase and line (@AsafYagoda, #629)
    • Add missing docstrings to Keithley 2306 battery simulator (@AidenDawn, #720)
    • Fix hcp instruments documentation (@bmoneke, #671)
    • Fix HPLegacyInstrument initializer API (@bilderbuchi, #684)
    • Fix Fwbell 5080 implementation (@mcdo0486, #714)
    • Fix broken documentation example. (@bmoneke, #738)
    • Fix typo in Keithley 2600 driver (@mcdo0486, #615)
    • Remove dynamic use of docstring from ATS545 and make more generic (@AidenDawn, #685)

    Automation

    • Add storing unitful experiment results (@bmoneke, #642)
    • Add storing conditions in file (@CasperSchippers, #503)

    GUI

    • Add compatibility with Qt 6 (@CasperSchippers, #688)
    • Add spinbox functionality for IntegerParameter and FloatParameter (@jarvas24, #656)
    • Add "delete data file" button to the browser_item_menu (@jarvas24, #654)
    • Split windows.py into a folder with separate modules (@mcdo0486, #593)
    • Remove dependency on matplotlib (@msmttchr, #622)
    • Remove deprecated access to QtWidgets through QtGui (@maederan201, #695)

    Miscellaneous

    • Update and extend documentation (@bilderbuchi, #712, @bmoneke, #655)
    • Add PEP517 compatibility & dynamically obtaining a version number (@bilderbuchi, #613)
    • Add an example and documentation regarding using a foreign instrument (@bmoneke, #647)
    • Add black configuration (@bleykauf, #683)
    • Remove VISAAdapter.has_supported_version() as it is not needed anymore.

    New Contributors

    @jcarbelbide, @mroeleke, @bmoneke, @garzetti, @AsafYagoda, @AidenDawn, @LastStarDust, @sansanda

    Full Changelog: https://github.com/pymeasure/pymeasure/compare/v0.10.0...v0.11.0

    Source code(tar.gz)
    Source code(zip)
  • v0.10.0(Apr 9, 2022)

    Version 0.10.0 (2022-04-09)

    Main items of this new release:

    • 23 new instrument drivers have been added
    • New dynamic Instrument properties can change their parameters at runtime
    • Communication settings can now be flexibly defined per protocol
    • Python 3.10 support was added and Python 3.6 support was removed.
    • Many additions, improvements and have been merged

    Instruments

    • New Agilent B1500 Data Formats and Documentation (@moritzj29)
    • New Anaheim Automation stepper motor controllers (@samcondon4)
    • New Andeen Hagerling capacitance bridges (@dkriegner)
    • New Anritsu MS9740A Optical Spectrum Analyzer (@md12g12)
    • New BK Precision 9130B Instrument (@dennisfeng2)
    • New Edwards nXDS (10i) Vacuum Pump (@hududed)
    • New Fluke 7341 temperature bath instrument (@msmttchr)
    • New Heidenhain ND287 Position Display Unit Driver (@samcondon4)
    • New HP 3478A (@LongnoseRob)
    • New HP 8116A 50 MHz Pulse/Function Generator (@CodingMarco)
    • New Keithley 2260B DC Power Supply (@bklebel)
    • New Keithley 2306 Dual Channel Battery/Charger Simulator (@mfikes)
    • New Keithley 2600 SourceMeter series (@Daivesd)
    • New Keysight N7776C Swept Laser Source (@maederan201)
    • New Lakeshore 421 (@CasperSchippers)
    • New Oxford IPS120-10 (@CasperSchippers)
    • New Pendulum CNT-91 frequency counter (@bleykauf)
    • New Rohde&Schwarz - SFM TV test transmitter (@LongnoseRob)
    • New Rohde&Schwarz FSL spectrum analyzer (@bleykauf)
    • New SR570 current amplifier driver (@pyMatJ)
    • New Stanford Research Systems SR510 instrument driver (@samcondon4)
    • New Toptica Smart Laser diode (@dkriegner)
    • New Yokogawa GS200 Instrument (@dennisfeng2)
    • Add output low grounded property to Keithley 6221 (@CasperSchippers)
    • Add shutdown function for Keithley 2260B (@bklebel)
    • Add phase control for Agilent 33500 (@corna)
    • Add assigning "ONCE" to auto_zero to Keithley 2400 (@mfikes)
    • Add line frequency controls to Keithley 2400 (@mfikes)
    • Add LIA and ERR status byte read properties to the SRS Sr830 driver (@samcondon4)
    • Add all commands to Oxford Intelligent Temperature Controller 503 (@CasperSchippers)
    • Fix DSP 7265 lockin amplifier (@CasperSchippers)
    • Fix bug in Keithley 6517B Electrometer (@CasperSchippers)
    • Fix Keithley2000 deprecated call to visa.config (@bklebel)
    • Fix bug in the Keithley 2700 (@CasperSchippers)
    • Fix setting of sensor flags for Thorlabs PM100D (@bleykauf)
    • Fix SCPI used for Keithley 2400 voltage NPLC (@mfikes)
    • Fix missing return statements in Tektronix AFG3152C (@bleykauf)
    • Fix DPSeriesMotorController bug (@samcondon4)
    • Fix Keithley2600 error when retrieving error code (@bicarlsen)
    • Fix Attocube ANC300 with new SCPI Instrument properties (@dkriegner)
    • Fix bug in wait_for_trigger of Agilent33220A (neal-kepler)

    GUI

    • Add time-estimator widget (@CasperSchippers)
    • Add management of progress bar (@msmttchr)
    • Remove broken errorbar feature (@CasperSchippers)
    • Change of pen width for pyqtgraph (@maederan201)
    • Make linewidth changeable (@CasperSchippers)
    • Generalise warning in plotter section (@CasperSchippers)
    • Implement visibility groups in InputsWidgets (@CasperSchippers)
    • Modify navigation of ManagedWindow directory widget (@jarvas24)
    • Improve Placeholder logic (@CasperSchippers)
    • Breakout widgets into separate modules (@mcdo0486)
    • Fix setSizePolicy bug with PySide2 (@msmttchr)
    • Fix managed window (@msmttchr)
    • Fix ListParameter for numbers (@moritzj29)
    • Fix incorrect columns on showing data (@CasperSchippers)
    • Fix procedure property issue (@msmttchr)
    • Fix pyside2 (@msmttchr)

    Miscellaneous

    • Improve SCPI property support (@msmttchr)

    • Remove broken safeKeyword management (@msmttchr)

    • Add dynamic property support (@msmttchr)

    • Add flexible API for defining connection configuration (@bilderbuchi)

    • Add write_binary_values() to SerialAdapter (@msmttchr)

    • Change an outdated pyvisa ask() to query() (@LongnoseRob)

    • Fix ZMQ bug (@bilderbuchi)

    • Documentation for passing tuples to control property (@bklebel)

    • Documentation bugfix (@CasperSchippers)

    • Fixed broken links in documentation. (@samcondon4)

    • Updated widget documentation (@mcdo0486)

    • Fix typo SCIP->SCPI (@mfikes)

    • Remove Python 3.6, add Python 3.10 testing (@bilderbuchi)

    • Modernise the code base to use Python 3.7 features (@bilderbuchi)

    • Added image data generation to Mock Instrument class (@samcondon4)

    • Add autodoc warnings to the problem matcher (@bilderbuchi)

    • Update CI & annotations (@bilderbuchi)

    • Test workers (@mcdo0486)

    • Change copyright date to 2022 (@LongnoseRob)

    • Removed unused code (@msmttchr)

    New Contributors

    @LongnoseRob, @neal, @hududed, @corna, @Daivesd, @samcondon4, @maederan201, @bleykauf, @mfikes, @bicarlsen, @md12g12, @CodingMarco, @jarvas24, @mcdo0486!

    Full Changelog: https://github.com/pymeasure/pymeasure/compare/v0.9...v0.10.0

    Source code(tar.gz)
    Source code(zip)
  • v0.9(Feb 7, 2021)

    This release brings a large number of new instruments, along with improvements to adapters.

    • PyMeasure is now officially at github.com/pymeasure/pymeasure
    • Python 3.9 is now supported, Python 3.5 removed due to EOL
    • Move to GitHub Actions from TravisCI and Appveyor for CI (@bilderbuchi)
    • New additions to Oxford Instruments ITC 503 (@CasperSchippers)
    • New Agilent 34450A and Keysight DSOX1102G instruments (@theMashUp, @jlarochelle)
    • Improvements to NI VirtualBench (@moritzj29)
    • New Agilent B1500 instrument (@moritzj29)
    • New Keithley 6517B instrument (@wehlgrundspitze)
    • Major improvements to PyVISA compatbility (@bilderbuchi, @msmttchr, @CasperSchippers, @cjermain)
    • New Anapico APSIN12G instrument (@StePhanino)
    • Improvements to Thorelabs Pro 8000 and SR830 (@Mike-HubGit)
    • New SR860 instrument (@StevenSiegl, @bklebel)
    • Fix to escape sequences (@tirkarthi)
    • New directory input for ManagedWindow (@paulgoulain)
    • New TelnetAdapter and Attocube ANC300 Piezo controller (@dkriegner)
    • New Agilent 34450A (@theMashUp)
    • New Razorbill RP100 strain cell controller (@pheowl)
    • Fixes to precision and default value of ScientificInput and FloatParameter (@moritzj29)
    • Fixes for Keithly 2400 and 2450 controls (@pyMatJ)
    • Improvments to Inputs and open_file_externally (@msmttchr)
    • Fixes to Agilent 8722ES (@alexmcnabb)
    • Fixes to QThread cleanup (@neal-kepler, @msmttchr)
    • Fixes to Keyboard interrupt, and parameters (@CasperSchippers)

    Thanks everyone who contributed to this release! Special thanks to @bilderbuchi and @CasperSchippers for maintaining the project!

    Source code(tar.gz)
    Source code(zip)
    PyMeasure-0.9.0-py3-none-any.whl(294.58 KB)
    PyMeasure-0.9.0.tar.gz(638.30 KB)
  • v0.8(Mar 29, 2020)

    This release brings a number of new features including live image plotting and measurement sequencing.

    • Python 3.8 is now supported
    • New Measurement Sequencer allows for running over a large parameter space (@CasperSchippers)
    • New image plotting feature for live image measurements (@jmittelstaedt)
    • Improvements to VISA adapter (@moritzj29)
    • Added Tektronix AFG 3000, Keithley 2750 (@StePhanino, @dennisfeng2)
    • Documentation improvements (@mivade)
    • Fix to ScientificInput for float strings (@moritzj29)
    • New validator: strict_discrete_range (@moritzj29)
    • Improvements to Recorder thread joining
    • Migrating the ReadtheDocs configuration to version 2
    • National Instruments Virtual Bench initial support (@moritzj29)

    Thanks to everyone who contributed to this release!

    Source code(tar.gz)
    Source code(zip)
    PyMeasure-0.8.0-py3-none-any.whl(241.00 KB)
    PyMeasure-0.8.0.tar.gz(571.92 KB)
  • v0.7(Aug 4, 2019)

    This release provides numerous fixes and improvements, including two new instruments. Python 3.4 is no longer officially supported (since it reached end-of-life). Python 3.7 is now supported by our automated testing.

    • Added Keithley 2450 and Agilent 33521A (@hlgirard, @Endever42)
    • Significant improvements to CI, dependencies, and conda environment (@bilderbuchi, @cjermain)
    • Fix for PyQT issue in ResultsDialog (@CasperSchippers)
    • Fix for wire validator in Keithley 2400 (@Fattotora)
    • Addition of source_enabled control for Keithley 2400 (@dennisfeng2)
    • Time constant fix and input controls for SR830 (@dennisfeng2)
    • Proper escaping support in CSV headers (@feph)
    • Minor updates (@dvase)

    Thanks to everyone who contributed to this release!

    Source code(tar.gz)
    Source code(zip)
    PyMeasure-0.7.0-py3-none-any.whl(206.83 KB)
    PyMeasure-0.7.0.tar.gz(534.62 KB)
  • v0.6.1(Apr 21, 2019)

  • v0.6(Jan 15, 2019)

    This release adds a significant amount of new instruments from the community of PyMeasure users, in addition to updates to existing instruments. The VXI11 protocol is now supported with an adapter for interfacing with Ethernet instruments.

    • New VXI11 Adapter for Ethernet instruments (@chweiser)
    • PyQt updates to 5.6.0
    • Added SRS SG380, Ametek 7270, Agilent 4156, HP 34401A, Advantest R3767CG, and Oxford ITC503 instrustruments (@sylkar, @jmittelstaedt, @vik-s, @troylf, @CasperSchippers)
    • Updates to Keithley 2000, Agilent 8257D, ESP 300, and Keithley 2400 instruments (@watersjason, @jmittelstaedt, @nup002)
    • Various minor bug fixes (@thosou)

    Thanks to everyone who contributed to this release!

    Source code(tar.gz)
    Source code(zip)
    PyMeasure-0.6.0-py3-none-any.whl(188.63 KB)
    PyMeasure-0.6.0.tar.gz(472.11 KB)
  • v0.5.1(Apr 14, 2018)

    This minor release provides corrections and updates. Most notable an issue relating to the user of minor version numbers is solved for using the PyVISA library for instrument control.

    • Minor versions of PyVISA are now properly handled
    • Documentation improvements (@Laogeodritt and @ederag)
    • Instruments now have set_process capability (@bilderbuchi)
    • Plotter now uses threads (@dvspirito)
    • Display inputs and PlotItem improvements (@Laogeodritt)

    Thanks to everyone who contributed to this version!

    Source code(tar.gz)
    Source code(zip)
    PyMeasure-0.5.1-py3-none-any.whl(162.32 KB)
    PyMeasure-0.5.1.tar.gz(459.69 KB)
  • v0.5(Oct 19, 2017)

    This release improves the stability of the Experiment and Worker classes by replacing multiprocessing code with threaded equivalents. The threads preform more consistently between the supported operating systems, and lead to more predictable behavior.

    • Threads are used by default, eliminating multiprocessing issues with spawn
    • Enhanced unit tests for threading
    • Sphinx Doctests are added to the documentation (@bilderbuchi)
    • Improvements to documentation (@JuMaD)

    Thanks to everyone who contributed to this release!

    Source code(tar.gz)
    Source code(zip)
    PyMeasure-0.5-py3-none-any.whl(163.92 KB)
    PyMeasure-0.5.tar.gz(455.82 KB)
  • v0.4.6(Aug 12, 2017)

    This minor release provides bug fixes for a number of regressions that cropped up with the most recent version 0.4.5. It also provides a path forward for better unit testing, which will be a significant focus for the next major release, version 0.5.

    • Reverted multiprocessing start method keyword arguments to fix Unix spawn issues (@ndr37)
    • Fixes to regressions in Results writing (@feinsteinben)
    • Fixes to TCP support using cloudpickle (@feinsteinben)
    • Restructing of unit test framework

    Thanks to everyone who contributed to this release in both commits and discussion!

    Source code(tar.gz)
    Source code(zip)
    PyMeasure-0.4.6.tar.gz(454.46 KB)
  • v0.4.5(Jul 5, 2017)

    This minor release improves a number of areas:

    • Recorder and Scribe now leverage QueueListener (@feinsteinben)
    • PrologixAdapter and SerialAdapter now handle Serial objects as adapters (@feinsteinben)
    • Optional TCP support now uses cloudpickle for serialization (@feinsteinben)
    • Significant PEP8 review and bug fixes (@feinsteinben)
    • Includes docs in the code distribution (@ghisvail)
    • Continuous integration support for Python 3.6 (@feinsteinben)

    Thanks to everyone who contributed to this release in both commits and discussion!

    Source code(tar.gz)
    Source code(zip)
    PyMeasure-0.4.5.tar.gz(450.49 KB)
  • v0.4.4(Jun 4, 2017)

  • v0.4.3(Mar 30, 2017)

    This minor release adds 5 new instruments and a number of bug fixes.

    • Added Agilent E4980, AMI 430, Agilent 34410A, Thorlabs PM100, and Anritsu MS9710C instruments (@TvBMcMaster, @dvspirito, and @mhdg)
    • Updates to PyVISA support (@minhhaiphys)
    • Initial work on resource manager (@dvspirito)
    • Fixes for Prologix adapter that allow read-write delays (@TvBMcMaster)
    • Fixes for conda environment on continuous integration

    Thanks to everyone that contributed to this release!

    Source code(tar.gz)
    Source code(zip)
    PyMeasure-0.4.3-py3-none-any.whl(155.66 KB)
    PyMeasure-0.4.3.tar.gz(254.38 KB)
  • v0.4.2(Aug 23, 2016)

    This minor release adds significant updates to the instrument classes, where the Instrument.control and Instrument.measurement functions are used to produce documented properties for many of the instruments to expose more features.

    • New instructions for installing with Anaconda and conda-forge package (thanks @melund!)
    • Bug-fixes to the Keithley 2000, SR830, and Agilent E4408B
    • Re-introduced the Newport ESP300 motion controller
    • Major update to the Keithely 2400, 2000 and Yokogawa 7651 to achieve a common interface
    • New command-string processing hooks for Instrument property functions
    • Updated LakeShore 331 temperature controller with new features
    • Updates to the Agilent 8257D signal generator for better feature exposure
    Source code(tar.gz)
    Source code(zip)
    PyMeasure-0.4.2-py3-none-any.whl(140.56 KB)
    PyMeasure-0.4.2.tar.gz(247.37 KB)
  • v0.4.1(Jul 31, 2016)

  • v0.4(Jul 29, 2016)

    This release supports Python 3.4, 3.5, and 3.6 on Windows, MacOSX, and Linux.

    • Replaced Instrument add_measurement and add_control with measurement and control functions
    • Added validators to allow Instrument.control to match restricted ranges
    • Added mapping to Instrument.control to allow more flexible inputs
    • Conda is now used to set up the Python environment
    • macOS testing in continuous integration
    • Major updates to the documentation
    Source code(tar.gz)
    Source code(zip)
    PyMeasure-0.4-py3-none-any.whl(72.29 KB)
    PyMeasure-0.4.tar.gz(221.74 KB)
  • v0.3(Apr 8, 2016)

    This release supports Python 3.4, 3.5, and 3.6 on Windows, MacOSX, and Linux.

    • Added IPython (Jupyter) notebook support with significant features
    • Updated set of example scripts and notebooks
    • New PyMeasure logo released
    • Removed support for Python <3.4
    • Changed multiprocessing to use spawn for compatibility
    • Significant work on the documentation
    • Added initial tests for non-instrument code
    • Continuous integration setup for Linux and Windows
    Source code(tar.gz)
    Source code(zip)
    PyMeasure-0.3-py3-none-any.whl(69.53 KB)
    PyMeasure-0.3.tar.gz(108.63 KB)
  • v0.2(Dec 16, 2015)

    This is major upgrade from version 0.1.6, which makes significant feature changes and enhancements. Python 3 is now required for PyMeasure.

    • Python 3 compatibility, removed support for Python 2
    • Considerable renaming for better PEP8 compliance
    • Added MIT License
    • Major restructuring of the package to break it into smaller modules
    • Major rewrite of display functionality, introducing new Qt objects for easy extensions
    • Major rewrite of procedure execution, now using a Worker process which takes advantage of multi-core CPUs
    • Addition of a number of examples
    • New methods for listening to Procedures, introducing ZMQ for TCP connectivity
    • Updates to Keithley2400 and VISAAdapter
    Source code(tar.gz)
    Source code(zip)
    PyMeasure-0.2.tar.gz(175.00 KB)
  • v0.1.6(Mar 19, 2015)

  • v0.1.5-alpha(Oct 22, 2014)

    • New Manager class for handling Procedures in a queue fashion
    • New Browser that works in tandem with the Manager to display the queue
    • Bug fixes for Results loading

    This release may have bugs for some instruments that have not been used. Install as indicated in release v0.1.0-alpha.

    Source code(tar.gz)
    Source code(zip)
    Automate-0.1.5.tar.gz(40.48 KB)
  • v0.1.4-alpha(Aug 2, 2014)

  • v0.1.3-alpha(Jul 20, 2014)

    • Replaced logging system with Python logging package
    • Added data management (Results) and bug fixes for Procedures and Parameters
    • Added pandas v0.14 to requirements for data management
    • Added data listeners, Qt4 and PyQtGraph helpers

    This release still has significant bugs for some instruments. Install as indicated in release v0.1.0-alpha.

    Source code(tar.gz)
    Source code(zip)
    Automate-0.1.3.tar.gz(35.62 KB)
  • v0.1.2-alpha(Jul 18, 2014)

  • v0.1.1-alpha(Jul 16, 2014)

    • Bug fixes to PrologixAdapter, VISAAdapter, Agilent 8722ES, Agilent 8257D, Stanford SR830, Danfysik8500
    • Added Tektronix TDS 2000 with basic functionality
    • Fixed Danfysik communication to handle errors properly

    This release still has significant bugs for other instruments. Install as indicated in release v0.1.0-alpha.

    Source code(tar.gz)
    Source code(zip)
    Automate-0.1.1.tar.gz(35.29 KB)
  • v0.1.0-alpha(Jul 15, 2014)

Owner
PyMeasure
Scientific measurements with Python
PyMeasure
FURY - A software library for scientific visualization in Python

Free Unified Rendering in Python A software library for scientific visualization in Python. General Information • Key Features • Installation • How to

null 169 Dec 21, 2022
Plotting library for IPython/Jupyter notebooks

bqplot 2-D plotting library for Project Jupyter Introduction bqplot is a 2-D visualization system for Jupyter, based on the constructs of the Grammar

null 3.4k Dec 29, 2022
An intuitive library to add plotting functionality to scikit-learn objects.

Welcome to Scikit-plot Single line functions for detailed visualizations The quickest and easiest way to go from analysis... ...to this. Scikit-plot i

Reiichiro Nakano 2.3k Dec 31, 2022
🎨 Python3 binding for `@AntV/G2Plot` Plotting Library .

PyG2Plot ?? Python3 binding for @AntV/G2Plot which an interactive and responsive charting library. Based on the grammar of graphics, you can easily ma

hustcc 990 Jan 5, 2023
NorthPitch is a python soccer plotting library that sits on top of Matplotlib

NorthPitch is a python soccer plotting library that sits on top of Matplotlib.

Devin Pleuler 30 Feb 22, 2022
🎨 Python Echarts Plotting Library

pyecharts Python ❤️ ECharts = pyecharts English README ?? 简介 Apache ECharts (incubating) 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达

pyecharts 13.1k Jan 3, 2023
Plotting library for IPython/Jupyter notebooks

bqplot 2-D plotting library for Project Jupyter Introduction bqplot is a 2-D visualization system for Jupyter, based on the constructs of the Grammar

null 3.4k Dec 30, 2022
:small_red_triangle: Ternary plotting library for python with matplotlib

python-ternary This is a plotting library for use with matplotlib to make ternary plots plots in the two dimensional simplex projected onto a two dime

Marc 611 Dec 29, 2022
An open-source plotting library for statistical data.

Lets-Plot Lets-Plot is an open-source plotting library for statistical data. It is implemented using the Kotlin programming language. The design of Le

JetBrains 820 Jan 6, 2023
🎨 Python Echarts Plotting Library

pyecharts Python ❤️ ECharts = pyecharts English README ?? 简介 Apache ECharts (incubating) 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达

pyecharts 10.6k Feb 18, 2021
Plotting library for IPython/Jupyter notebooks

bqplot 2-D plotting library for Project Jupyter Introduction bqplot is a 2-D visualization system for Jupyter, based on the constructs of the Grammar

null 3k Feb 18, 2021
:small_red_triangle: Ternary plotting library for python with matplotlib

python-ternary This is a plotting library for use with matplotlib to make ternary plots plots in the two dimensional simplex projected onto a two dime

Marc 391 Feb 17, 2021
An open-source plotting library for statistical data.

Lets-Plot Lets-Plot is an open-source plotting library for statistical data. It is implemented using the Kotlin programming language. The design of Le

JetBrains 509 Feb 17, 2021
A Python library for plotting hockey rinks with Matplotlib.

Hockey Rink A Python library for plotting hockey rinks with Matplotlib. Installation pip install hockey_rink Current Rinks The following shows the cus

null 24 Jan 2, 2023
A deceptively simple plotting library for Streamlit

?? Plost A deceptively simple plotting library for Streamlit. Because you've been writing plots wrong all this time. Getting started pip install plost

Thiago Teixeira 192 Dec 29, 2022
termplotlib is a Python library for all your terminal plotting needs.

termplotlib termplotlib is a Python library for all your terminal plotting needs. It aims to work like matplotlib. Line plots For line plots, termplot

Nico Schlömer 553 Dec 30, 2022
MPL Plotter is a Matplotlib based Python plotting library built with the goal of delivering publication-quality plots concisely.

MPL Plotter is a Matplotlib based Python plotting library built with the goal of delivering publication-quality plots concisely.

Antonio López Rivera 162 Nov 11, 2022
Python scripts for plotting audiograms and related data from Interacoustics Equinox audiometer and Otoaccess software.

audiometry Python scripts for plotting audiograms and related data from Interacoustics Equinox 2.0 audiometer and Otoaccess software. Maybe similar sc

Hamilton Lab at UT Austin 2 Jun 15, 2022
Analysis and plotting for motor/prop/ESC characterization, thrust vs RPM and torque vs thrust

esc_test This is a Python package used to plot and analyze data collected for the purpose of characterizing a particular propeller, motor, and ESC con

Alex Spitzer 1 Dec 28, 2021