Skip to main content

Unified quantum computing, solid-state and pulse sequencing physical experimentation framework.

Project description

Quantify-core

Slack Pipelines PyPi Code Quality Coverage Documentation Status License Code style Unitary Fund

Quantify logo

Quantify is a python based data acquisition platform focused on Quantum Computing and solid-state physics experiments. It is built on top of QCoDeS and is a spiritual successor of PycQED. Quantify currently consists of quantify-core and quantify-scheduler.

Take a look at the latest documentation for quantify-core or use the switch in the bottom of left panel to switch to the documentation for older releases.

Quantify-core is the core module that contains all basic functionality to control experiments. This includes:

  • A framework to control instruments.
  • A data-acquisition loop.
  • Data storage and analysis.
  • Parameter monitoring and live visualization of experiments.

⚠️Caution! This is a pre-release beta version, changes and improvements are expected.

Overview

Quantify evolves rapidly, nevertheless, the following presentation by Adriaan Rol gives a good general overview of Quantify.

About

Quantify-core is maintained by The Quantify consortium consisting of Qblox and Orange Quantum Systems.

Qblox logo         Orange Quantum Systems logo

 

The software is free to use under the conditions specified in the license.

Credits

Developers

Contributors

Changelog

0.6.3 (2022-08-05)

  • Changes to InstrumentMonitor and PlotMonitor to fix errors due to racing conditions. (!358)
  • Can save metadata with QuantifyExperiment (!355)
  • Contribution guidelines updated, added: Versioning, Backward Compatibility and Deprecation Policy (!282)

0.6.2 (2022-06-30)

  • Sanitize Markdown for proper display on PyPi.
  • Data Handling - New function to extract parameters from snapshot, including submodules (!360)

0.6.1 (2022-06-30)

Merged branches and closed issues

  • Require lmfit >= 1.0.3 due to a typo within lmfit for the guess_from_peak2d function. (!346)
  • Fixed calling super().create_figures() when inheriting analysis classes (issue was introduced by merge request !337). (#313)
  • PlotMonitor - Fix crash in secondary plotmon when data is one-dimensional. (!349)
  • Documentation sources are converted from restructured text format to MyST markdown. (!350)

0.6.0 (2022-05-25)

Breaking changes

  • Supported Python versions are now 3.8-3.10. Python 3.7 support is dropped. (!328)
  • MeasurementControl - Removed the instrument_monitor (InstrumentRefParameter) from the MeasurementControl class. There is no need to couple the instrument monitor object with the MeasurementControl anymore. (!324)
  • InstrumentMonitor - Made the update method private (renamed to _update). Also removed the force argument in the method. (!324)

Merged branches and closed issues

  • InstrumentMonitor - Display parameter values with non-number type nicely. Only for parameters without unit. (!336)
  • Data Handling - Setting datadir to None now correctly sets datadir to default directory (~/quantify-data/). (!338)
  • Data Handling - Added a DecodeToNumpy decoder class and function argument list_to_ndarray to the function load_snapshot, which enables load_settings_onto_instrument to support loading numpy arrays parameters from json lists. (!342, !343, #309)
  • Data handling - Add API to save custom text files as experiment data. (!325)
  • Data handling - Fix attributes handling when converting datasets with to_gridded() method. (!277, !302)
  • Experiment helpers - Loading settings from snapshot now supports Instrument submodules. (#307, !338)
  • Plotmon - Suppress warning about all-NaN datasets during plotting. (!314)
  • Visualization - Added kwarg dicts to plot_fit to pass matplotlib keyword arguments and plot_fit returns list of matplotlib Line2D objects. (!334, !331 (closed))
  • Analysis - CosineModel now guesses a frequency based on a Fourier transform of the data. (!335)
  • Analysis - We do not store all Matplotlib figures and axes for all analysis objects in memory anymore. This fixes out-of-memory error for long measurement runs, when a lot of figures are created. (#298, !337, !345)
  • MeasurementControl - Performance improvement in MeasurementControl data construction. (!333)
  • Bugfix - Fix QHullError occurring in RemotePlotmon when supplying two uniformly spaced settables to MeasurementControl.setpoints(). (#305, !323)
  • Packaging and distribution - Added support for PEP 561. (!322)

0.5.3 (2022-02-25)

Merged branches and closed issues

  • Analysis - Changed the metric of the AllXY analysis to use the mean of the absolute deviations. (!300)
  • MeasurementControl - Added a measurement_description function in the MeasurementControl to return a serializable description of the latest measurement. (!279)
  • MeasurementControl - Add option to run an experiment without saving data (!308)
  • Infrastructure - Added utilities to support deprecation (!281)
  • Bugfix - Fix qcodes 0.32.0 incompatibility by replacing all references of qcodes.Instrument._all_instruments. (!295)

0.5.2 (2021-12-08)

Merged branches and closed issues

  • Data - Introduced a QuantifyExperiment class within the data.experiment module to separate data handling responsibilities from MeasurementControl. (!273, !274)
  • Docs - Added quantify logo to the documentation. (!263)
  • Infrastructure - Fixes the latest tests. (Except for Sphinx issues) (!275)
  • Infrastructure - Fixes the tests temporarily by pinning matplotlib 3.4.3 (!269)
  • Infrastructure - Added prospector config file for mypy in codacy. (copy from quantify-scheduler) (!259)
  • Bugfix - Fix a bug in adjust_axeslabels_SI. (!272)

0.5.1 (2021-11-01)

Merged branches and closed issues

  • Analysis - Automatically rotate Rabi data to the axis with the best SNR (#249, !223)
  • Analysis - Added support for calibration points to rotate and scale data to a calibrated axis for single-qubit timedomain experiments (T1, Echo, Ramsey and AllXY) (#227, !219)
  • Analysis - Added extra constraints to fits for T1, Echo and Ramsey when using a calibrated axis (T1, Echo, Ramsey) (#236, !219)
  • Analysis - Removed requirement for data on which to perform timedomain analysis to be acquired in radial coordinates (#227, !213).
  • Analysis - Removed positive amplitude constraint from Rabi analysis (!213).
  • Analysis - Detect calibration points automatically for single qubit time-domain experiments (!234)
  • Docs - Added bibliography with sphinxcontrib-bibtex extension (!207).
  • Docs - Added notebook_to_jupyter_sphinx sphinx extension converter for tutorials writing (!220).
  • Docs - Add qcodes parameters docs to sphinx build (!255)
  • Docs - Adds a notebook to jupyter sphinx converter for tutorials writing. (!220)
  • MeasurementControl - Added representation with summary of settables, gettables and setpoints (!222).
  • MeasurementControl - Added lazy_set functionality to avoid setting settables to same value (#261, !233).
  • InstrumentMonitor - Extended Instrument Monitor to handle submodules and channels (#213, !226).
  • Data - Adopted new specification for dataset v2.0 format. (!224)
  • Infrastructure - Adds additional pre-commit and pre-push hooks (!254)
  • Infrastructure - Ensure line endings are always committed with unix-like style (!227)
  • Visualization - Factor out plotmon refresh from MeasurementControl (!248)
  • Bugfix - Solved a bug where a fit would fail for a Ramsey experiment with negative values (#246, !219)
  • Bugfix - Rabi analysis for negative signal amplitudes can now converge. (!213)
  • Bugfix - Fixed divide by 0 warning in resonator spectroscopy analysis (!216).
  • Bugfix - Fixed snapshot failing for qcodes instruments with dead weakrefs (!221).
  • Bugfix - load_settings_onto_instrument does not try to set parameters to None if they are already None (#232, !225)
  • Bugfix - replace OrderedDict with dict (!237)
  • Bugfix - Fixes to utilities.general and function rename (!232)
  • Bugfix - Fixes temporarily the funcparserlib failing rtd. (!249)
  • Bugfix - alpha settings_overwrite["mpl_transparent_background"] = False (!236)
  • Bugfix - Ramsey analysis cal points (!235)
  • Bugfix - Ensures MeasurementControl representation works even when instruments are closed/freshly instantiated. (follow up from !226) (!229)
  • Bugfix - fix snapshot for dead instruments (!221)
  • Bugfix - The load_settings_onto_instrument function no longer attempts to set a QCoDeS parameter to None in certain cases. (!225)
  • Bugfix - Fix filelock logging (!238)
  • Bugfix - Fix divide by 0 which gives warning in resonator analysis (!216)
  • Bugfix - Fix a bug in adjust_axeslabels_SI where it would update a label if no unit was provided (!272)

0.5.0 (2021-08-06)

Breaking changes

  • Change of namespace from quantify.* to quantify_core.*

Merged branches and closed issues

  • Change namespace. (!195)
  • Support xarray >0.18.0. (!198, #223)
  • Unpinned pyqt5 version in setup to fix bug on macOS big sur. (!203)
  • Added an example stopwatch gettable. (!187)
  • Added new utility class quantify_core.utilities.inspect_utils. (!190, !192)
  • Delete print(list) statement from locate_experiment_container. (!194)
  • Allow for unit-aware printing of floats and other values with no error. (!167, #193)
  • Plotmon: support non-linear (e.g., logarithmic space) for x and y coordinates. (!201)
  • Consistency of naming conventions in analysis code. (!188)
  • Ramsey analysis. (!166)
  • Echo analysis. (!176)
  • AllXY analysis. (!177)
  • Interpolated 2D analysis and ND optimization analysis. (!180)
  • Quantities of interest saving to JSON now supports more types, including uncertainties.ufloats. (!164, #152)

0.4.0 (2021-05-10)

  • Release of the analysis framework including basic analyses, example classes and documentation on how to make a custom analysis class.
  • Various bug fixes.
  • First beta-release of quantify-core.

Merged branches and closed issues

  • Defined how to pass optional arguments for analysis subclasses. (#184, !158)
  • Added warning when an analysis class returns a bad fit and improve UX. (!163)
  • Renamed analysis variables .dataset and .dataset_raw for consistency. (#197, !171)
  • add support for ufloat in format_value_string (!151)
  • Provide methods for loading quantities of interest and processed dataset. (#191, !165)
  • Added Rabi analysis subclass. (!159)
  • fix for the multiple kwargs keys being passed into ax.text (!154)
  • log the pip packages in the CI (same as in scheduler) (!168)
  • UX improvements over current analysis flow control interrupt_before interface. (#183, !158)
  • Allow providing an xarray dataset as input for analysis (#181, !156)
  • Adds pytest fixture tmpdir_factory whenever possible. (!162)
  • Fixes a bug with range-casting in the plot_fit function in the mpl_plotting module (!142)
  • Utility function to handle the None edge case when converting lmfit pars to ufloat (#186, !160)
  • T1 analysis (!137)
  • Fixed a bug with loading settings onto an instrument (#166, !139)
  • Storing quantities of interest in spectroscopy analysis simplified (!152)
  • fix warning: Using a non-tuple sequence for multidimensional indexing is deprecated (!147)
  • simplified header for all python files (#92, !146)
  • Drop MeasurementControl soft_avg parameter in favor of MC.run(soft_avg=3) (!144)
  • Better displaying of lmfit parameters and standard errors (!133)
  • Plot duplicate setpoints in a 1D dataset (#173, !134)
  • Downgrade and pin pyqt5 version (#170, !134)
  • Sphinx autodoc function parameters and output types based on type hints!113
  • Implemented {code}numpy.bool_ patch for xarray 0.17.0 (temp fix for #161, !131)

Breaking changes

  • Analysis steps execution refactored and added optional arguments through .run (#184, !158)
    • Any analysis class now requires explicit execution of the steps with .run().
    • One-liner still available a_obj = MyAnalysisClass().run()
  • Analysis dataset variables and filename changed for consistency (!171):
    • BaseAnalysis.dataset_raw renamed to BaseAnalysis.dataset
    • BaseAnalysis.dataset renamed to BaseAnalysis.dataset_processed
    • "processed_dataset.hdf5" renamed to "dataset_processed.hdf5"
  • The MeasurementControl soft_avg parameter has been removed. The same fucntionality is now available through MC.run(soft_avg=n) (!144)

0.3.2 (2021-03-17)

  • Analysis framework beta version (limited documentation).
  • Measurement control supports an inner loop in batched mode with outer iterative loops.
  • Improvements to the dataset format (potentially breaking changes, see notes below).
    • Support of complex numbers and arrays in the dataset storage through h5netcdf engine.
    • Proper use of the coordinate property of xarray in quantify datasets.
  • New data handling utilities: load_dataset_from_path, locate_experiment_container, write_dataset.
  • Keyboard interrupt and Jupyter kernel interrupts are handled safely in MeasurementControl.
  • Improved and more extensive documentation.
  • Various bug fixes.

Merged branches and closed issues

  • Dataset format changed to use Xarray Coordinates [no Dimensions] (!98)
  • Added batched mode with outer iterative loops (!98)
  • Switched default dataset engine to support complex numbers #150 (!114)
  • Analysis class, framework, subclass examples #63 (!89, !122, !123)
  • Cyclic colormaps auto-detect in 2D analysis (!118, !122)
  • Safely handle Keyboard interrupt or Jupyter kernel interrupts (!125, !127)

Potentially breaking changes

Please see merge request !98 for a python snippet that will make all previous datasets compliant with this change! Note that this is only required if you want to load old datasets in quantify.visualization.pyqt_plotmon.PlotMonitor_pyqt.

  • Dataset format is updated to use Xarray Coordinates [no Dimensions] (!98)
  • The TUID class is only a validator now to avoid issues with h5netcdf

0.3.1 (2021-02-15)

  • Added function to load settings from previous experiments onto instruments (load_settings_onto_instrument).
  • Added support for @property as attributes of Settables/Gettables.
  • Migrated code style to black.
  • Fixed support for python3.9.
  • Significant improvements to general documentation.
  • Improved installation instructions for windows and MacOS.
  • Changed the dataset .unit attribute to .units to adopt xarray default (Breaking change!).
  • Various minor bugfixes.

Merged branches and closed issues

  • Windows install instr (!79)
  • Load instrument settings (!29)
  • Docs/general fixes (!82)
  • updated copyright years (!84)
  • Hotfix makefile docs (!83)
  • Hot fix tuids max num (!85)
  • added reqs for scipy, fixes #133 (!87)
  • Added link on cross-fork collaboration (!90)
  • Allow easy access to the tests datadir from a simple import (!95)
  • Add custom css for rtd (!27)
  • Dset units attr, closes #147 (!101)
  • Add setGeometry method to instrument monitor and plotmon (!88)
  • Enforce a datadir choice to avoid potential data loss (!86)
  • Migrated code style to black (!93)
  • Fixed support for python3.9 (!94)
  • Added support for dynamic change of datadir for plotmon (!97)
  • Added support for @property as attributes of Settables/Gettables (!100)
  • "unit" attr of xarray variables in dataset changed to "units" for compatibility with xarray utilities. (!101)
  • Updated numpy requirement (!104)
  • Updated installation intructions for MacOS #142 (!99)
  • Bugfix for get tuids containing method (!106)

Breaking changes

Please see merge request !101 for a python snippet that will make all previous datasets compliant with this breaking change!

  • "unit" attr of xarray variables in dataset changed to "units" for compatibility with xarray utilities. (!101)

0.3.0 (2020-12-17)

  • Persistence mode feature added to the plotting monitor responsible for visualization during experiments, see also tutorial 4 in the docs.
  • Instrument monitor feature added to support live snapshot monitoring during experiments.
  • Renaming of [soft, hard]-loops to [iterative, batched]-loops respectively.
  • Adds t_start and t_stop arguments to the function get_tuids_containing in quantify.data.handling.
  • Various bug fixes and improvements to documentation.

Merged branches and closed issues

  • Fix for pyqtgraph plotting and instrument monitor remote process sleeping !81.
  • Plotting monitor is now running in a completely detached process !78.
  • Persistence mode added to the plotting monitor !72.
  • Adds explicit numpy version number (==1.19.2) requirement for windows in the setup. (!74).
  • Improved documentation on how to set/get the datadirectory #100 (!71)
  • Batched refactor. Closes #113 (!69).
  • Instrument monitor feature added. Closes #62 (!65).
  • Hot-fix for exception handling of gettable/settable in MC. Closes #101 (!64).
  • Added t_start and t_stop arguments to get_tuids_containing function within quantify.data.handling. Closes #69 (!57, !62).
  • Fix for the case when MC does not call finish on gettable. Closes #96 (!60).

0.2.0 (2020-10-16)

  • Repository renamed to quantify-core.
  • Scheduler functionality factored out into quantify-scheduler repository.

Merged branches and closed issues

  • !11 Advanced MC, closed #13.
  • First prototype of sequencer #16 (!13), moved to quantify-scheduler.
  • Documentation of sequencer datatypes #19 (!13), moved to quantify-scheduler.
  • Simplified settable gettable interface #32 (!15).
  • Keyboard interrupt handler for Measurement Control #20 (!12).
  • Documentation for gettable and settable #27 (!14).
  • Sequencer hardening and cleanup (!16), moved to quantify-scheduler.
  • CZ doc updates and rudimentary CZ implementation (!18), moved to quantify-scheduler.
  • Pulsar asm backend (!17), moved to quantify-scheduler.
  • Minor fixes sequencer (!19), moved to quantify-scheduler.
  • Utility function to get_tuids_containing #48 (!22).
  • Enable modulation bugfix #42 (!23), moved to quantify-scheduler.
  • Added copyright notices to source files #36 (!25).
  • Custom readthedocs theme to change column width, fixes #28 (!27).
  • Amplitude limit on waveforms #41 (!24), moved to quantify-scheduler.
  • Pulse diagram autoscaling bufix #49 (!26), moved to quantify-scheduler.
  • Implementation of adaptive measurement loops in the measurement control #24 (!21)
  • Load instrument settings utility function #21, !29.
  • Support for data acquisition in sequencer (!28), moved to quantify-scheduler.
  • Documentation for data storage, experiment containers and dataset #7 (!20).
  • Function to create a plot monitor from historical data #56 (!32).
  • Bugfix for buffersize in dynamically resized dataset (!35).
  • Bugfix for adaptive experiments with n return variables (!34)
  • Exteneded sequencer.rst tutorial to include QRM examples (!33), moved to quantify-scheduler.
  • Refactor, Moved quantify-scheduler to new repository (!37).
  • Gettable return variables made consistent for multiple gettables #68 (!38).
  • Contribution guidelines updated #53 (!31).
  • Bugfix for unexpected behaviour in keyboard interrupt for measurements #73 (!39)
  • Documentation improvements #71 (!40).
  • Improvements to tutorial !41.
  • Removed visualization for scheduler !43.
  • Fix broken links in install and contributions !44.
  • Fixes bug in TUID validator #75 (42).
  • Standardize use of numpydoc accross repo #67 (!46).
  • Fix for online build on readthedocs !47.
  • CI hardening, base python version for tests is 3.7 (minimum version) !50.
  • New data folder structure (Breaking change!) #76 (!48).
  • Updated installation guide #77 (!49).
  • Minor changes to RTD displaying issues (!51).
  • Convert jupyter notebooks to .rst files with jupyter-execute (!52).
  • Cleanup before opening repo #86 and #82 (!53)

0.1.1 (2020-05-25)

  • Hotfix to update package label and fix PyPI

0.1.0 (2020-05-21)

  • First release on PyPI.

🗈 Note

  • # denotes a closed issue.
  • ! denotes a merge request.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

quantify-core-0.6.3.tar.gz (5.5 MB view hashes)

Uploaded Source

Built Distribution

quantify_core-0.6.3-py2.py3-none-any.whl (133.5 kB view hashes)

Uploaded Python 2 Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page