qkit 0.5.4__tar.gz → 0.7.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- qkit-0.7.0/.github/workflows/test.yml +27 -0
- {qkit-0.5.4 → qkit-0.7.0}/.gitignore +1 -0
- {qkit-0.5.4 → qkit-0.7.0}/PKG-INFO +11 -7
- {qkit-0.5.4 → qkit-0.7.0}/README.md +1 -1
- {qkit-0.5.4 → qkit-0.7.0}/pyproject.toml +9 -7
- qkit-0.7.0/src/qkit/_version.py +1 -0
- qkit-0.7.0/src/qkit/analysis/ZIPowerFromAmplitude.py +78 -0
- qkit-0.7.0/src/qkit/analysis/circle_fit/circlefit_analysis.py +157 -0
- qkit-0.7.0/src/qkit/analysis/fit_analysis_adapter.py +70 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/analysis/numerical_derivative.py +0 -4
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/analysis/qfit.py +16 -11
- qkit-0.7.0/src/qkit/analysis/rabi_peak_tracker.py +27 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/instrument_base.py +1 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/instrument_tools.py +6 -4
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/s_init/S70_load_visa.py +0 -1
- qkit-0.7.0/src/qkit/drivers/ZISetup.py +44 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/gui/plot/plot.py +12 -9
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/gui/qviewkit/DatasetsWindow.py +78 -58
- qkit-0.7.0/src/qkit/measure/laboneq_measurement.py +137 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/spectroscopy/spectroscopy_measurement.py +8 -8
- qkit-0.7.0/src/qkit/measure/timedomain/zi_common_experiments.py +150 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/transport_measurement.py +0 -4
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/unified_measurements.py +158 -157
- qkit-0.7.0/src/qkit/measure/utils/current_voltage_tools.py +57 -0
- qkit-0.7.0/src/qkit/measure/utils/email_tools.py +82 -0
- qkit-0.7.0/src/qkit/measure/utils/flux_tools.py +35 -0
- qkit-0.7.0/src/qkit/measure/utils/spectroscopy_tools.py +133 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/storage/store.py +1 -1
- qkit-0.7.0/tests/analysis/test_resonance_tracking.py +24 -0
- {qkit-0.5.4 → qkit-0.7.0}/tests/measure/test_unified_syntax.py +65 -23
- qkit-0.5.4/.git +0 -1
- qkit-0.5.4/.github/workflows/test.yml +0 -23
- qkit-0.5.4/src/qkit/_version.py +0 -1
- qkit-0.5.4/src/qkit/analysis/circle_fit/another_circle_fit.py +0 -66
- qkit-0.5.4/src/qkit/measure/laboneq_measurement.py +0 -83
- qkit-0.5.4/tests/breadcrumb/.7c57581a89db.breadcrumb.lock +0 -0
- qkit-0.5.4/tests/core/.7c57581a89db.breadcrumb +0 -4
- qkit-0.5.4/tests/core/.7c57581a89db.breadcrumb.lock +0 -0
- qkit-0.5.4/tests/measure/test.h5 +0 -0
- qkit-0.5.4/tests/storage/large_file.h5 +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/.gitattributes +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/.github/workflows/release.yml +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/.travis.yml +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/AUTHORS +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/CITATION.cff +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/LICENSE +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/devices.toml.example +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/.gitignore +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/Makefile +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/make.bat +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/sample_data/1Q-NIST.json +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/sample_data/P8PPH2_anticrossing_sample_data.h5 +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/sample_data/QZQ3H8.sample +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/conf.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/index.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/installation.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/modules.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/qkit.analysis.circle_fit.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/qkit.analysis.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/qkit.config.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/qkit.core.lib.com.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/qkit.core.lib.devices.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/qkit.core.lib.file_service.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/qkit.core.lib.network.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/qkit.core.lib.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/qkit.core.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/qkit.core.s_init.bkup.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/qkit.core.s_init.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/qkit.gui.notebook.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/qkit.gui.plot.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/qkit.gui.qviewkit.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/qkit.gui.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/qkit.instruments.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/qkit.logs.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/qkit.measure.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/qkit.measure.spectroscopy.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/qkit.measure.timedomain.awg.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/qkit.measure.timedomain.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/qkit.measure.transport.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/qkit.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/qkit.services.qplexkit.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/qkit.services.qsurveilkit.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/qkit.services.raspi_misc.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/qkit.services.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/doc/source/qkit.storage.rst +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/images/Qkit_Logo.png +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/images/Qkit_Logo.svg +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/images/Qkit_QRcode.png +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/images/Qkit_QRcode.svg +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/analysis/CurveXtractor.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/analysis/IV_curve.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/analysis/IV_curve2.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/analysis/IV_curve3.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/analysis/Manual point picker.ipynb_template +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/analysis/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/analysis/avoided_crossing_fit.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/analysis/circle_fit/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/analysis/circle_fit/circle_fit_2019/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/analysis/circle_fit/circle_fit_2019/circuit.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/analysis/circle_fit/circle_fit_classic/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/analysis/circle_fit/circle_fit_classic/calibration.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/analysis/circle_fit/circle_fit_classic/circlefit.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/analysis/circle_fit/circle_fit_classic/circuit.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/analysis/circle_fit/circle_fit_classic/utilities.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/analysis/iq_cloud_analysis.ipynb_template +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/analysis/iq_cloud_analysis.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/analysis/manual_point_picker.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/analysis/pointtracker.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/analysis/qdata.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/analysis/qps_rings.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/analysis/resonator.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/analysis/sonnet_parser.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/analysis/spectroscopy.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/analysis/timedomain.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/analysis/uncertainties_utilities.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/config/.gitignore +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/config/README.md +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/config/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/config/config_holder.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/config/environment.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/config/local.py_template +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/config/services.py_template +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/.gitignore +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/README +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/VERSION +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/flow.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/instrument_basev2.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/lib/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/lib/com/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/lib/com/info_client.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/lib/com/info_service.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/lib/com/ri_client.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/lib/com/ri_service.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/lib/com/signals.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/lib/file_service/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/lib/file_service/breadcrumbs.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/lib/file_service/file_info_database.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/lib/file_service/file_info_database_lib.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/lib/list_dict_DB.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/lib/misc.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/lib/network/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/lib/network/tcpclient.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/lib/temp.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/s_init/S10_logging.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/s_init/S14_setup_directories.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/s_init/S16_available_modules.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/s_init/S20_check_for_updates.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/s_init/S25_info_service.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/s_init/S30_qkit_start.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/s_init/S65_load_RI_service.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/s_init/S80_load_file_service.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/s_init/S85_init_measurement.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/s_init/S98_started.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/s_init/S99_init_user.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/s_init/_30_network_server.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/s_init/_80_create_instruments.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/s_init/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/core/startup.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/ADwinProII_SMU.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/AbstractIVDevice.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/AbstractMicrowaveSource.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/AbstractThermometer.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/AbstractVNA.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Agilent_DSO.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Agilent_E8257D.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Agilent_PNAX.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Agilent_TwissTorr74.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Agilent_VNA_E5071C.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/AnaPico_APUASYN20.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Anritsu_MG37022.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Anritsu_MS2830A.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Anritsu_VNA.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Anritsu_VNA_MS4642B.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/BKPrecision_9242.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Bluefors_GHS.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Caen_FAST_PS.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/DC_DAC_LTC2666.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/DummyVNA.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/EA_PS9360.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/ERASynth.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/EdwardsActiveDigitalController.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/EthernetNode.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/EthernetServer.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/EthernetServerWin.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/FTDI_DAQ.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Faulhaber_3564K024B_C.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/GHzDAC.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/HP_34401A.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/HP_81110A.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/IQ_Mixer.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/IVD_dummy.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/IVVI_BiasDAC.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Inficon.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Keithley.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Keithley_2000.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Keithley_2450.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Keithley_2636A.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Keysight_35670A.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Keysight_B2900.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Keysight_E8267D.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Keysight_N5173B.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Keysight_VNA_E5071C.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Keysight_VNA_E5080B.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Keysight_VNA_E5080B_spectrum.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Keysight_VNA_P9375A.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Lmx2595.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/MKS_647C.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/MicroMag3.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/ModernDriverTest.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/NI_DAQ.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/NI_DAQ_IV.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/OxfordInstruments_Kelvinox_IGH.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Oxford_ITC503.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Oxford_Triton.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/RFPCB.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/RFPCBJ.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/RFPCB_V2.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/RS_FSUP.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/RS_SGMA.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/RS_VNA_ZNAXX.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/RT_MW_Switch.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/SR_830.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/SerialPortCommunication.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Spectrum_M2i2030.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Spectrum_M3i2132.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Spectrum_M4i2211.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/StepAttenuator.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/StepMotor.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Tabor_WX1284C.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Tektronix_AWG5014.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Tektronix_AWG520.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Tektronix_AWG7062.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Tektronix_PWS4205.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Teslameter_FM302.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Tunnel_DAC.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/VCAs_TD.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/VNA_dummy.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Virtual_Coil.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Virtual_Current_Source.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Virtual_VCA.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Windfreak_calibration_files/Readme.txt +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_288_ChannelA.cal +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_288_ChannelB.cal +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_289_ChannelA.cal +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_289_ChannelB.cal +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelA.cal +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelA_calibration_with_freq_and_pow +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelA_calibration_with_freq_and_pow.npy +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelA_calibration_with_freq_and_pow_calibration_matrix_dBm.txt +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelA_calibration_with_freq_and_pow_frequency_Hz.txt +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelA_calibration_with_freq_and_pow_power_intrinsic_units.txt +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelB.cal +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelB_calibration_with_freq_and_pow +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelB_calibration_with_freq_and_pow.npy +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelB_calibration_with_freq_and_pow_calibration_matrix_dBm.txt +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelB_calibration_with_freq_and_pow_frequency_Hz.txt +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelB_calibration_with_freq_and_pow_power_intrinsic_units.txt +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Windfreak_calibration_files/convert_files_to_python_3.ipynb +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Windfreak_calibration_files/test_open_file_python3.ipynb +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Windfreaktech916.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Windfreaktech_SynthHD.cal +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Windfreaktech_SynthHD.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Yokogawa.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Yokogawa_GS200.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Yokogawa_GS210.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/Yokogawa_GS820.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/ZHInstSHFQC.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/ZHInst_Abstract.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/ZHInst_Abstractv2.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/ZHInst_PQSC.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/ZHInst_SHFSG.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/ZHInst_SHFSGv2.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/ZHInst_UHFQA.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/ZHInst_UHFQAv2.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/ZHInst_Virtual_VNA.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/ZHInst_Virtual_VNAv2.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/ZHInst_Waveforms/CPMG.json +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/ZHInst_Waveforms/CPMG.seq +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/ZHInst_Waveforms/rabi.json +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/ZHInst_Waveforms/rabi.seq +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/ZHInst_Waveforms/ramsey.json +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/ZHInst_Waveforms/ramsey.seq +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/_Spectrum_M3i2132/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/_Spectrum_M3i2132/errors.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/_Spectrum_M3i2132/regs.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/_Spectrum_M4i2211/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/_Spectrum_M4i2211/errors.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/_Spectrum_M4i2211/h2py.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/_Spectrum_M4i2211/regs.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/agilent_33210A.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/dll_support_nidaq.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/manual_settings.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/mfc_dummy.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/nidaq_syncIV.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/ohmmeter_dummy.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/qdevil_qdacII.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/qplexkit_client.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/quartz_dummy.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/switch_client.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/te_opto_dac.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/tip2_client.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/tip_client.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/two_port_switch.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/virtual_MultiplexingReadout.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/virtual_VNA_quantum_machines.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/virtual_magnet.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/virtual_measure_spec.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/virtual_pwsMagnet.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/virtual_step_attenuator.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/virtual_temperature_UFO.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/virtual_tunnel_electronic.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/virtual_yokomagnet.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/drivers/visa_prologix.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/gui/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/gui/notebook/Progress_Bar.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/gui/notebook/Stopwatch.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/gui/notebook/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/gui/notebook/quickplot.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/gui/notebook/wf_plot.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/gui/plot/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/gui/plot/url_launcher.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/gui/qviewkit/PlotWindow.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/gui/qviewkit/PlotWindow_lib.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/gui/qviewkit/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/gui/qviewkit/info_subsys.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/gui/qviewkit/main.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/gui/qviewkit/main_view.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/gui/qviewkit/pg_time_axis.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/gui/qviewkit/plot_view.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/gui/qviewkit/qviewkit.bat +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/install/install.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/install/jupyter_lab_config.py-tpl +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/install/linux/qkit-jupyter-lab.desktop +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/install/linux/qkit-qviewkit-url.desktop +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/install/linux/qkit-qviewkit.desktop +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/install/qkit_local_config.py-tpl +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/json_handler.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/measurement_base.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/measurement_class.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/samples_class.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/spectroscopy/README.md +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/spectroscopy/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/spectroscopy/signal_spectroscopy.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/spectroscopy/spectroscopy.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/spectroscopy/spectroscopy_unified.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/thermometry_measurement.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/timedomain/002_TD1_f01_rabi_t1_ramsey.ipynb +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/timedomain/VirtualAWG.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/timedomain/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/timedomain/awg/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/timedomain/awg/generate_waveform.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/timedomain/awg/load_awg.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/timedomain/awg/load_tawg.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/timedomain/awg/tomography.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/timedomain/gate_func.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/timedomain/initialize.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/timedomain/measure_ZI_td.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/timedomain/measure_td.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/timedomain/pulse_sequence.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/timedomain/quantum_machine/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/timedomain/quantum_machine/basic_qubit_experiments.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/timedomain/quantum_machine/basic_qubit_experiments_V2.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/timedomain/quantum_machine/pulses.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/timedomain/quantum_machine/qm_qkit_wrapper.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/timedomain/quantum_machine/qm_qubit_config.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/timedomain/quantum_machine/qm_qubit_config_V2.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/timedomain/quantum_machine/quantum_jump_monitoring.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/timedomain/quantum_machine/qubit_high_temp.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/timedomain/quantum_machine/script.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/timedomain/quantum_machine/script_pyqt.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/timedomain/sequence_library.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/transport/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/transport/transport.py +0 -0
- {qkit-0.5.4/src/qkit/services → qkit-0.7.0/src/qkit/measure/utils}/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/measure/write_additional_files.py +0 -0
- {qkit-0.5.4/src/qkit/services/qdepokit → qkit-0.7.0/src/qkit/services}/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/qdepokit/Deposition_template.ipynb +0 -0
- {qkit-0.5.4/src/qkit/services/qplexkit → qkit-0.7.0/src/qkit/services/qdepokit}/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/qdepokit/sdi.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/qplexkit/.gitignore +0 -0
- {qkit-0.5.4/src/qkit/services/qsurveilkit → qkit-0.7.0/src/qkit/services/qplexkit}/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/qplexkit/ccr.json_template +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/qplexkit/install_systemd_service.sh +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/qplexkit/pcf8575.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/qplexkit/qplexkit.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/qplexkit/server.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/qplexkit/test_PCF8575.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/qsurveilkit/README.md +0 -0
- {qkit-0.5.4/src/qkit/services/raspi_misc/RT_switch → qkit-0.7.0/src/qkit/services/qsurveilkit}/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/qsurveilkit/client_main.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/qsurveilkit/data_class.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/qsurveilkit/plasma1_gui.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/qsurveilkit/plasma1_gui.ui +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/qsurveilkit/server_main.py_template +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/qsurveilkit/settings.cfg_template +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/qsurveilkit/srv_thread.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/qsurveilkit/worker.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/raspi_misc/OxfordInstruments_Kelvinox_IGH_serial.py +0 -0
- {qkit-0.5.4/src/qkit/services/raspi_misc → qkit-0.7.0/src/qkit/services/raspi_misc/RT_switch}/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/raspi_misc/RT_switch/switchbox_server.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/raspi_misc/RT_switch/two_port_switch_manual_client.py +0 -0
- {qkit-0.5.4/src/qkit/services/raspi_misc/dc_dac → qkit-0.7.0/src/qkit/services/raspi_misc}/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/raspi_misc/dc_dac/DAC_LTC2666_communication.py +0 -0
- {qkit-0.5.4/src/qkit/services/raspi_misc/edwards → qkit-0.7.0/src/qkit/services/raspi_misc/dc_dac}/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/raspi_misc/dc_dac/server.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/raspi_misc/edwards/EdwardsActiveDigitalController.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/raspi_misc/edwards/EdwardsBridgeReadout.py +0 -0
- {qkit-0.5.4/src/qkit/services/raspi_misc/nitrogen → qkit-0.7.0/src/qkit/services/raspi_misc/edwards}/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/raspi_misc/edwards/edw_client.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/raspi_misc/edwards/edw_server.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/raspi_misc/erasynth_server.py +0 -0
- {qkit-0.5.4/src/qkit/services/raspi_misc/tip → qkit-0.7.0/src/qkit/services/raspi_misc/nitrogen}/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/raspi_misc/nitrogen/nitrogen_controller.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/raspi_misc/nitrogen/nitrogen_server.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/raspi_misc/nitrogen/refill_manual.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/raspi_misc/nitrogen/refilling_switch_off.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/raspi_misc/nitrogen/refilling_switch_on.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/raspi_misc/nitrogen/sendMail.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/raspi_misc/step_attenuator_server.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/raspi_misc/step_motor.py +0 -0
- {qkit-0.5.4/src/qkit/storage → qkit-0.7.0/src/qkit/services/raspi_misc/tip}/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/raspi_misc/tip/fridge_monitoring.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/switchbox/lib_oled96.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/switchbox/server.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/services/switchbox/switch.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/storage/README.md +0 -0
- {qkit-0.5.4/tests → qkit-0.7.0/src/qkit/storage}/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/storage/hdf_DateTimeGenerator.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/storage/hdf_constants.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/storage/hdf_dataset.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/storage/hdf_file.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/storage/hdf_lib.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/storage/hdf_view.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/templates/Analysis/Probestation.ipynb +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/src/qkit/templates/Measurements/Probestation.ipynb +0 -0
- /qkit-0.5.4/tests/analysis/test_new_circlefit.py → /qkit-0.7.0/tests/__init__.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/tests/breadcrumb/.1337deadbeef.breadcrumb +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/tests/breadcrumb/.deadbeef1337.breadcrumb +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/tests/breadcrumb/.gitignore +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/tests/breadcrumb/STUVWX_dummy.h5 +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/tests/breadcrumb/test_breadcrumbs.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/tests/core/.gitignore +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/tests/core/STUVWX_dummy.h5 +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/tests/core/subdir/YZ0123_dummy.h5 +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/tests/core/test_file_info_database.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/tests/measure/.gitignore +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/tests/storage/.gitignore +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/tests/storage/test_hdf5.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/tests/test_qkit_basics.py +0 -0
- {qkit-0.5.4 → qkit-0.7.0}/tests/url/test_url_handler.py +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
name: Tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: 'master'
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
test:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
strategy:
|
|
11
|
+
matrix:
|
|
12
|
+
python-version: ["3.11", "3.12", "3.13", "3.14"]
|
|
13
|
+
|
|
14
|
+
steps:
|
|
15
|
+
- name: Checkout
|
|
16
|
+
uses: actions/checkout@v4.2.2
|
|
17
|
+
with:
|
|
18
|
+
fetch-depth: 200
|
|
19
|
+
fetch-tags: true
|
|
20
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
21
|
+
uses: actions/setup-python@v5
|
|
22
|
+
with:
|
|
23
|
+
python-version: ${{ matrix.python-version }}
|
|
24
|
+
- name: Install build dependencies ${{ matrix.python-version }}
|
|
25
|
+
run: python -m pip install -U hatch hatch-vcs
|
|
26
|
+
- name: Run tests ${{ matrix.python-version }}
|
|
27
|
+
run: hatch test --cover-quiet --randomize
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: qkit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7.0
|
|
4
4
|
Summary: qKIT quantum measurement suite in python
|
|
5
5
|
Project-URL: Homepage, https://github.com/qkitgroup/qkit
|
|
6
6
|
Project-URL: Bug Tracker, https://github.com/qkitgroup/qkit/issues
|
|
@@ -345,14 +345,17 @@ License: GNU GENERAL PUBLIC LICENSE
|
|
|
345
345
|
library. If this is what you want to do, use the GNU Lesser General
|
|
346
346
|
Public License instead of this License.
|
|
347
347
|
|
|
348
|
+
License-File: AUTHORS
|
|
349
|
+
License-File: LICENSE
|
|
348
350
|
Keywords: Data Acquisition,Framework,Measurement,Quantum
|
|
349
351
|
Classifier: Framework :: Jupyter :: JupyterLab :: 3
|
|
350
352
|
Classifier: Intended Audience :: Science/Research
|
|
351
353
|
Classifier: License :: OSI Approved :: GNU General Public License v2 (GPLv2)
|
|
352
|
-
Classifier: Programming Language :: Python :: 3.
|
|
353
|
-
Requires-Python: >=3.
|
|
354
|
-
Requires-Dist: filelock>=3.
|
|
354
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
355
|
+
Requires-Python: >=3.11
|
|
356
|
+
Requires-Dist: filelock>=3.10
|
|
355
357
|
Requires-Dist: h5py>=3.8
|
|
358
|
+
Requires-Dist: importlib-resources; python_version == '3.9' or python_version == '3.10'
|
|
356
359
|
Requires-Dist: ipython
|
|
357
360
|
Requires-Dist: numpy>=1.24
|
|
358
361
|
Requires-Dist: packaging
|
|
@@ -377,8 +380,9 @@ Requires-Dist: qgrid>=1.0; extra == 'qgrid'
|
|
|
377
380
|
Provides-Extra: timedomain
|
|
378
381
|
Requires-Dist: zerorpc>=0.6; extra == 'timedomain'
|
|
379
382
|
Provides-Extra: url
|
|
380
|
-
Requires-Dist: parsita
|
|
383
|
+
Requires-Dist: parsita>=2.0.0; extra == 'url'
|
|
381
384
|
Provides-Extra: zurich-instruments
|
|
385
|
+
Requires-Dist: laboneq-applications>=26.1.0; extra == 'zurich-instruments'
|
|
382
386
|
Requires-Dist: laboneq>=2.59.0; extra == 'zurich-instruments'
|
|
383
387
|
Description-Content-Type: text/markdown
|
|
384
388
|
|
|
@@ -402,7 +406,7 @@ Description-Content-Type: text/markdown
|
|
|
402
406
|
### Platform:
|
|
403
407
|
The qkit framework has been tested under windows and with limits under macos x and linux.
|
|
404
408
|
The gui requires h5py, qt and pyqtgraph, which work fine on these platforms.
|
|
405
|
-
The core of the framework should run with python
|
|
409
|
+
The core of the framework should run with python 3.9+
|
|
406
410
|
|
|
407
411
|
## Configuration
|
|
408
412
|
There are three sources of configuration, which are used to set up your environment
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
### Platform:
|
|
19
19
|
The qkit framework has been tested under windows and with limits under macos x and linux.
|
|
20
20
|
The gui requires h5py, qt and pyqtgraph, which work fine on these platforms.
|
|
21
|
-
The core of the framework should run with python
|
|
21
|
+
The core of the framework should run with python 3.9+
|
|
22
22
|
|
|
23
23
|
## Configuration
|
|
24
24
|
There are three sources of configuration, which are used to set up your environment
|
|
@@ -12,10 +12,10 @@ authors = [
|
|
|
12
12
|
description = "qKIT quantum measurement suite in python"
|
|
13
13
|
readme = "README.md"
|
|
14
14
|
license = { file = "LICENSE" }
|
|
15
|
-
requires-python = ">=3.
|
|
15
|
+
requires-python = ">=3.11"
|
|
16
16
|
classifiers = [
|
|
17
17
|
"Framework :: Jupyter :: JupyterLab :: 3",
|
|
18
|
-
"Programming Language :: Python :: 3.
|
|
18
|
+
"Programming Language :: Python :: 3.11",
|
|
19
19
|
"Intended Audience :: Science/Research",
|
|
20
20
|
"License :: OSI Approved :: GNU General Public License v2 (GPLv2)"
|
|
21
21
|
]
|
|
@@ -32,8 +32,9 @@ dependencies = [
|
|
|
32
32
|
"tomli>=2.0.1",
|
|
33
33
|
"ipython",
|
|
34
34
|
"packaging",
|
|
35
|
-
"filelock>=3.
|
|
36
|
-
"tqdm>=4.67.0"
|
|
35
|
+
"filelock>=3.10",
|
|
36
|
+
"tqdm>=4.67.0",
|
|
37
|
+
"importlib_resources; python_version == '3.9' or python_version == '3.10'"
|
|
37
38
|
]
|
|
38
39
|
|
|
39
40
|
[project.scripts]
|
|
@@ -49,7 +50,8 @@ jupyter = [
|
|
|
49
50
|
"ipywidgets>=8.0"
|
|
50
51
|
]
|
|
51
52
|
zurich-instruments = [
|
|
52
|
-
"LabOneQ>=2.59.0"
|
|
53
|
+
"LabOneQ>=2.59.0",
|
|
54
|
+
"laboneq-applications>=26.1.0"
|
|
53
55
|
]
|
|
54
56
|
analysis = [
|
|
55
57
|
"matplotlib>=3.7",
|
|
@@ -63,7 +65,7 @@ timedomain = [
|
|
|
63
65
|
"zerorpc>=0.6"
|
|
64
66
|
]
|
|
65
67
|
url = [
|
|
66
|
-
"parsita
|
|
68
|
+
"parsita>=2.0.0"
|
|
67
69
|
]
|
|
68
70
|
|
|
69
71
|
|
|
@@ -92,7 +94,7 @@ exclude = ["data/*", "notebooks/*", "logs/*", "venv/*"]
|
|
|
92
94
|
|
|
93
95
|
[tool.hatch.envs.hatch-test]
|
|
94
96
|
extra-dependencies = [
|
|
95
|
-
"parsita
|
|
97
|
+
"parsita>=2.0.0"
|
|
96
98
|
]
|
|
97
99
|
|
|
98
100
|
[tool.pytest.ini_options]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.7.0"
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
|
|
3
|
+
from qkit.measure.unified_measurements import AnalysisTypeAdapter, MeasurementTypeAdapter, DataView, Axis
|
|
4
|
+
from qkit.measure.laboneq_measurement import LabOneQMeasurement
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class ZIPowerFromAmplitude(AnalysisTypeAdapter):
|
|
8
|
+
"""
|
|
9
|
+
An analysis converting the amplitude measurements and axis returned by Zurich Instruments devices into powers (dBm).
|
|
10
|
+
|
|
11
|
+
Our other devices usually return power, and most people are used to seeing and working with decibels.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
_convert_datasets: dict[str, str] = None
|
|
15
|
+
_convert_axes: dict[str, str] = None
|
|
16
|
+
_generated_datasets: dict[str, MeasurementTypeAdapter.DataDescriptor] = None
|
|
17
|
+
|
|
18
|
+
def __init__(self, output_range: float, convert_datasets: None | dict[str, str] = None, convert_axes: None | dict[str, str] = None):
|
|
19
|
+
self._convert_datasets = convert_datasets
|
|
20
|
+
self._convert_axes = convert_axes
|
|
21
|
+
self._output_range = output_range
|
|
22
|
+
|
|
23
|
+
def _should_convert_dataset(self, schema: 'MeasurementTypeAdapter.DataDescriptor') -> bool:
|
|
24
|
+
if self._convert_datasets is None:
|
|
25
|
+
return schema.name.endswith("_mag")
|
|
26
|
+
else:
|
|
27
|
+
return schema.name in self._convert_datasets
|
|
28
|
+
|
|
29
|
+
def _map_dataset_name(self, schema: 'MeasurementTypeAdapter.DataDescriptor') -> str:
|
|
30
|
+
assert self._should_convert_dataset(schema)
|
|
31
|
+
if self._convert_datasets is None:
|
|
32
|
+
return schema.name.replace("_mag", "_power")
|
|
33
|
+
else:
|
|
34
|
+
return self._convert_datasets[schema.name]
|
|
35
|
+
|
|
36
|
+
def _should_convert_axis(self, axis: Axis) -> bool:
|
|
37
|
+
if self._convert_axes is None:
|
|
38
|
+
return axis.name.startswith("amplitudes")
|
|
39
|
+
else:
|
|
40
|
+
return axis.name in self._convert_axes
|
|
41
|
+
|
|
42
|
+
def _map_axis_name(self, axis: Axis) -> str:
|
|
43
|
+
assert self._should_convert_axis(axis)
|
|
44
|
+
if self._convert_axes is None:
|
|
45
|
+
return axis.name.replace("amplitudes", "powers")
|
|
46
|
+
else:
|
|
47
|
+
return self._convert_axes[axis.name]
|
|
48
|
+
|
|
49
|
+
@staticmethod
|
|
50
|
+
def amplitude_to_power(amplitudes: np.ndarray) -> np.ndarray:
|
|
51
|
+
return 30 + 20 * np.log10(amplitudes) # Power at 50 Ohm impedance, amplitudes in Volts, dBm
|
|
52
|
+
|
|
53
|
+
def _map_axes(self, axes: tuple[Axis, ...]) -> tuple[Axis, ...]:
|
|
54
|
+
return tuple(
|
|
55
|
+
Axis(self._map_axis_name(a), LabOneQMeasurement.calculate_powers(a.range, self._output_range), 'dBm') if self._should_convert_axis(a) else a
|
|
56
|
+
for a in axes
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
def expected_structure(self, parent_schema: tuple['MeasurementTypeAdapter.DataDescriptor', ...]) -> tuple[
|
|
60
|
+
'MeasurementTypeAdapter.DataDescriptor', ...]:
|
|
61
|
+
self._generated_datasets: dict[str, MeasurementTypeAdapter.DataDescriptor] = {
|
|
62
|
+
schema.name: MeasurementTypeAdapter.DataDescriptor(self._map_dataset_name(schema), self._map_axes(schema.axes), "dBm?", schema.category)
|
|
63
|
+
for schema in parent_schema if self._should_convert_dataset(schema)
|
|
64
|
+
}
|
|
65
|
+
return tuple(self._generated_datasets.values())
|
|
66
|
+
|
|
67
|
+
def default_views(self, parent_schema: tuple['MeasurementTypeAdapter.DataDescriptor', ...]) -> dict[
|
|
68
|
+
str, "DataView"]:
|
|
69
|
+
# We don't add any additional views.
|
|
70
|
+
return dict()
|
|
71
|
+
|
|
72
|
+
def perform_analysis(self, data: tuple['MeasurementTypeAdapter.GeneratedData', ...]) -> tuple[
|
|
73
|
+
'MeasurementTypeAdapter.GeneratedData', ...]:
|
|
74
|
+
return tuple(
|
|
75
|
+
self._generated_datasets[datum.descriptor.name].with_data(self.amplitude_to_power(datum.data))
|
|
76
|
+
for datum in data if datum.descriptor.name in self._generated_datasets
|
|
77
|
+
)
|
|
78
|
+
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
|
|
3
|
+
from qkit.analysis.circle_fit.circle_fit_2019.circuit import circuit, reflection_port, notch_port
|
|
4
|
+
from qkit.measure.unified_measurements import AnalysisTypeAdapter, MeasurementTypeAdapter, DataView, DataViewSet, \
|
|
5
|
+
DataReference
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class CircleFitAnalysis(AnalysisTypeAdapter):
|
|
9
|
+
"""
|
|
10
|
+
Perform circle fit analysis on a spectroscopy measurement.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
def __init__(self, ports = 2, amplitude_tag = 'amp', phase_tag = 'phase', autocorrect = False):
|
|
14
|
+
self._ports = ports
|
|
15
|
+
self._amplitude_tag = amplitude_tag
|
|
16
|
+
self._phase_tag = phase_tag
|
|
17
|
+
self._autocorrect = autocorrect
|
|
18
|
+
|
|
19
|
+
def expected_structure(self, parent_schema: tuple['MeasurementTypeAdapter.DataDescriptor', ...]) -> tuple[
|
|
20
|
+
'MeasurementTypeAdapter.DataDescriptor', ...]:
|
|
21
|
+
"""
|
|
22
|
+
We expect the synthesized circle (real and imag) and the fit parameters.
|
|
23
|
+
"""
|
|
24
|
+
frequency_axis = parent_schema[0].axes
|
|
25
|
+
return (
|
|
26
|
+
MeasurementTypeAdapter.DataDescriptor("real", frequency_axis, "real", "data"),
|
|
27
|
+
MeasurementTypeAdapter.DataDescriptor("imag", frequency_axis, "imag", "data"),
|
|
28
|
+
MeasurementTypeAdapter.DataDescriptor("fit_real", frequency_axis, "mag", "analysis"),
|
|
29
|
+
MeasurementTypeAdapter.DataDescriptor("fit_imag", frequency_axis, "imag", "analysis"),
|
|
30
|
+
MeasurementTypeAdapter.DataDescriptor("fit_mag", frequency_axis, "mag", "analysis"),
|
|
31
|
+
MeasurementTypeAdapter.DataDescriptor("fit_phase", frequency_axis, "rad", "analysis"),
|
|
32
|
+
MeasurementTypeAdapter.DataDescriptor("q_c", (), "", "analysis"),
|
|
33
|
+
MeasurementTypeAdapter.DataDescriptor("q_c_abs", (), "", "analysis"),
|
|
34
|
+
MeasurementTypeAdapter.DataDescriptor("q_c_min", (), "", "analysis"),
|
|
35
|
+
MeasurementTypeAdapter.DataDescriptor("q_c_max", (), "", "analysis"),
|
|
36
|
+
MeasurementTypeAdapter.DataDescriptor("q_i", (), "", "analysis"),
|
|
37
|
+
MeasurementTypeAdapter.DataDescriptor("q_i_min", (), "", "analysis"),
|
|
38
|
+
MeasurementTypeAdapter.DataDescriptor("q_i_max", (), "", "analysis"),
|
|
39
|
+
MeasurementTypeAdapter.DataDescriptor("q_i_no_dia_corr", (), "", "analysis"),
|
|
40
|
+
MeasurementTypeAdapter.DataDescriptor("q_l", (), "", "analysis"),
|
|
41
|
+
MeasurementTypeAdapter.DataDescriptor("a", (), "mag", "analysis"),
|
|
42
|
+
MeasurementTypeAdapter.DataDescriptor("alpha", (), "rad", "analysis"),
|
|
43
|
+
MeasurementTypeAdapter.DataDescriptor("delay", (), "s", "analysis"),
|
|
44
|
+
MeasurementTypeAdapter.DataDescriptor("delay_remaining", (), "s", "analysis"),
|
|
45
|
+
MeasurementTypeAdapter.DataDescriptor("f_res", (), "Hz", "analysis"),
|
|
46
|
+
MeasurementTypeAdapter.DataDescriptor("phi", (), "rad", "analysis"),
|
|
47
|
+
MeasurementTypeAdapter.DataDescriptor("theta", (), "rad", "analysis"),
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
def default_views(self, parent_schema: tuple['MeasurementTypeAdapter.DataDescriptor', ...]) -> dict[
|
|
51
|
+
str, "DataView"]:
|
|
52
|
+
frequency = parent_schema[0].axes[0]
|
|
53
|
+
parent_amp_name = [entry.name for entry in parent_schema if self._amplitude_tag in entry.name][0]
|
|
54
|
+
parent_phase_name = [entry.name for entry in parent_schema if self._phase_tag in entry.name][0]
|
|
55
|
+
return {
|
|
56
|
+
"circle_fit": DataView(
|
|
57
|
+
view_params={
|
|
58
|
+
"labels": ("real", "imag"),
|
|
59
|
+
"plot_style": 1,
|
|
60
|
+
"markersize": 5,
|
|
61
|
+
"aspect": 1.0
|
|
62
|
+
},
|
|
63
|
+
view_sets=[
|
|
64
|
+
DataViewSet( # Real data
|
|
65
|
+
x_path=DataReference("real", category='data'),
|
|
66
|
+
y_path=DataReference("imag", category='data'),
|
|
67
|
+
),
|
|
68
|
+
DataViewSet( # Fit result
|
|
69
|
+
x_path=DataReference("fit_real", category='analysis'),
|
|
70
|
+
y_path=DataReference("fit_imag", category='analysis')
|
|
71
|
+
)
|
|
72
|
+
]
|
|
73
|
+
),
|
|
74
|
+
"phase_fit": DataView(
|
|
75
|
+
view_params={
|
|
76
|
+
"labels": ("frequency", "phase"),
|
|
77
|
+
"plot_style": 1,
|
|
78
|
+
"markersize": 5
|
|
79
|
+
},
|
|
80
|
+
view_sets=[
|
|
81
|
+
DataViewSet(
|
|
82
|
+
x_path=DataReference(frequency.name),
|
|
83
|
+
y_path=DataReference(parent_phase_name)
|
|
84
|
+
),
|
|
85
|
+
DataViewSet(
|
|
86
|
+
x_path=DataReference(frequency.name),
|
|
87
|
+
y_path=DataReference("fit_phase", category='analysis')
|
|
88
|
+
)
|
|
89
|
+
]
|
|
90
|
+
),
|
|
91
|
+
"mag_fit": DataView(
|
|
92
|
+
view_params={
|
|
93
|
+
"labels": ("frequency", "mag"),
|
|
94
|
+
"plot_style": 1,
|
|
95
|
+
"markersize": 5
|
|
96
|
+
},
|
|
97
|
+
view_sets=[
|
|
98
|
+
DataViewSet(
|
|
99
|
+
x_path=DataReference(frequency.name),
|
|
100
|
+
y_path=DataReference(parent_amp_name)
|
|
101
|
+
),
|
|
102
|
+
DataViewSet(
|
|
103
|
+
x_path=DataReference(frequency.name),
|
|
104
|
+
y_path=DataReference("fit_mag", category='analysis')
|
|
105
|
+
)
|
|
106
|
+
]
|
|
107
|
+
)
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
def perform_analysis(self, data: tuple['MeasurementTypeAdapter.GeneratedData', ...]) -> tuple[
|
|
111
|
+
'MeasurementTypeAdapter.GeneratedData', ...]:
|
|
112
|
+
amp_data = [datum for datum in data if self._amplitude_tag in datum.descriptor.name][0]
|
|
113
|
+
phase_data = [datum for datum in data if self._phase_tag in datum.descriptor.name][0]
|
|
114
|
+
|
|
115
|
+
frequencies = amp_data.descriptor.axes[0].range
|
|
116
|
+
amplitudes = amp_data.data
|
|
117
|
+
# Unwrap and linearly correct data
|
|
118
|
+
if self._autocorrect:
|
|
119
|
+
unwrapped = np.unwrap(phase_data.data)
|
|
120
|
+
phases = unwrapped - np.nan_to_num(np.linspace(unwrapped[0], unwrapped[-1], len(unwrapped)))
|
|
121
|
+
else:
|
|
122
|
+
phases = phase_data.data
|
|
123
|
+
z_data = amplitudes * np.exp(1j * phases)
|
|
124
|
+
|
|
125
|
+
# precompute for storage later.
|
|
126
|
+
imag = np.imag(z_data)
|
|
127
|
+
real = np.real(z_data)
|
|
128
|
+
|
|
129
|
+
# Perform the fit
|
|
130
|
+
if self._ports == 1:
|
|
131
|
+
fit: circuit = reflection_port(frequencies, z_data)
|
|
132
|
+
elif self._ports == 2:
|
|
133
|
+
fit: circuit = notch_port(frequencies, z_data)
|
|
134
|
+
else:
|
|
135
|
+
raise NotImplemented
|
|
136
|
+
fit.autofit()
|
|
137
|
+
|
|
138
|
+
results = [
|
|
139
|
+
real, imag, # Converted measured data
|
|
140
|
+
fit.z_data_sim.real, fit.z_data_sim.imag, np.abs(fit.z_data_sim), np.angle(fit.z_data_sim), # Fitted data
|
|
141
|
+
# The fit parameters
|
|
142
|
+
# Quality factors
|
|
143
|
+
fit.Qc, fit.absQc, fit.Qc_min, fit.Qc_max,
|
|
144
|
+
fit.Qi, fit.Qi_min, fit.Qi_max, fit.Qi_no_dia_corr,
|
|
145
|
+
fit.Ql,
|
|
146
|
+
# Center parameters
|
|
147
|
+
fit.a, fit.alpha,
|
|
148
|
+
# Delay
|
|
149
|
+
fit.delay, fit.delay_remaining,
|
|
150
|
+
# Misc
|
|
151
|
+
fit.fr,
|
|
152
|
+
fit.phi, fit.theta,
|
|
153
|
+
]
|
|
154
|
+
|
|
155
|
+
declared_shape = self.expected_structure(tuple(datum.descriptor for datum in data))
|
|
156
|
+
return tuple(desc.with_data(data) for desc, data in zip(declared_shape, results))
|
|
157
|
+
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
from collections import namedtuple
|
|
2
|
+
from typing import Callable, Union
|
|
3
|
+
|
|
4
|
+
import numpy as np
|
|
5
|
+
|
|
6
|
+
from qkit.measure.unified_measurements import AnalysisTypeAdapter, DataGenerator, MeasurementTypeAdapter, DataView, \
|
|
7
|
+
DataViewSet, DataReference
|
|
8
|
+
from scipy.optimize import curve_fit
|
|
9
|
+
|
|
10
|
+
FitParam = namedtuple('FitParam', ['name', 'init_value', 'unit'])
|
|
11
|
+
|
|
12
|
+
class FitAnalysisAdapter(AnalysisTypeAdapter):
|
|
13
|
+
|
|
14
|
+
def __init__(self, fit_function: Callable, dataset_phrase: str,
|
|
15
|
+
p0: Union[tuple[FitParam, ...], Callable[[np.ndarray, np.ndarray], tuple[FitParam, ...]]],
|
|
16
|
+
post_hook: Union[Callable, None] = None, fit_name: str = 'fit_curve'):
|
|
17
|
+
self.synth_desc = None
|
|
18
|
+
self.fit_function = fit_function
|
|
19
|
+
self.dataset_phrase = dataset_phrase
|
|
20
|
+
self.p0 = p0
|
|
21
|
+
self.post_hook = post_hook
|
|
22
|
+
self.fit_name = fit_name
|
|
23
|
+
example_p0 = self.p0(np.linspace(0, 100, 100), np.ones(100)) if callable(self.p0) else self.p0
|
|
24
|
+
self.structure = tuple(
|
|
25
|
+
DataGenerator.DataDescriptor(name=param.name, unit=param.unit, axes=tuple(), category='analysis')
|
|
26
|
+
for param in example_p0
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
def expected_structure(self, parent_schema: tuple['MeasurementTypeAdapter.DataDescriptor', ...]) -> tuple[
|
|
30
|
+
'MeasurementTypeAdapter.DataDescriptor', ...]:
|
|
31
|
+
relevant_descriptor = [desc for desc in parent_schema if self.dataset_phrase in desc.name][0]
|
|
32
|
+
self.synth_desc = DataGenerator.DataDescriptor(name=self.fit_name, unit=relevant_descriptor.unit, axes=relevant_descriptor.axes, category='analysis')
|
|
33
|
+
return self.structure + (self.synth_desc,)
|
|
34
|
+
|
|
35
|
+
def default_views(self, parent_schema: tuple['MeasurementTypeAdapter.DataDescriptor', ...]) -> dict[str, "DataView"]:
|
|
36
|
+
relevant_descriptor = [desc for desc in parent_schema if self.dataset_phrase in desc.name][0]
|
|
37
|
+
x_axis = relevant_descriptor.axes[0]
|
|
38
|
+
return {
|
|
39
|
+
'fit': DataView(
|
|
40
|
+
view_params= {
|
|
41
|
+
"plot_style": 1,
|
|
42
|
+
"markersize": 5
|
|
43
|
+
},
|
|
44
|
+
view_sets=[
|
|
45
|
+
DataViewSet(# Real Data
|
|
46
|
+
x_path=DataReference(x_axis.name),
|
|
47
|
+
y_path=DataReference(relevant_descriptor.name),
|
|
48
|
+
),
|
|
49
|
+
DataViewSet(# Fit Curve
|
|
50
|
+
x_path=DataReference(x_axis.name),
|
|
51
|
+
y_path=DataReference(self.fit_name, 'analysis'),
|
|
52
|
+
)
|
|
53
|
+
]
|
|
54
|
+
)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
def perform_analysis(self, data: tuple['MeasurementTypeAdapter.GeneratedData', ...]) -> tuple[
|
|
58
|
+
'MeasurementTypeAdapter.GeneratedData', ...]:
|
|
59
|
+
relevant_data = [datum for datum in data if self.dataset_phrase in datum.descriptor.name][0]
|
|
60
|
+
x = relevant_data.descriptor.axes[0].range
|
|
61
|
+
y = relevant_data.data
|
|
62
|
+
|
|
63
|
+
start_params = self.p0(x, y) if callable(self.p0) else self.p0
|
|
64
|
+
popt, pcov = curve_fit(self.fit_function, x, y, p0=tuple(param.init_value for param in start_params))
|
|
65
|
+
self.post_hook(popt, pcov)
|
|
66
|
+
synthetic_data = self.fit_function(x, *popt)
|
|
67
|
+
return tuple(
|
|
68
|
+
desc.with_data(opt_param)
|
|
69
|
+
for (desc, opt_param) in zip(self.structure, popt)
|
|
70
|
+
) + (self.synth_desc.with_data(synthetic_data),)
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import itertools
|
|
2
|
-
from typing import override
|
|
3
2
|
|
|
4
3
|
from scipy import signal
|
|
5
4
|
|
|
@@ -26,7 +25,6 @@ class SavgolNumericalDerivative(AnalysisTypeAdapter):
|
|
|
26
25
|
self._polyorder = polyorder
|
|
27
26
|
self._derivative = derivative
|
|
28
27
|
|
|
29
|
-
@override
|
|
30
28
|
def perform_analysis(self, data: tuple['MeasurementTypeAdapter.GeneratedData', ...]) -> tuple[
|
|
31
29
|
'MeasurementTypeAdapter.GeneratedData', ...]:
|
|
32
30
|
parent_schema = tuple([element.descriptor for element in data])
|
|
@@ -44,7 +42,6 @@ class SavgolNumericalDerivative(AnalysisTypeAdapter):
|
|
|
44
42
|
return tuple(out)
|
|
45
43
|
|
|
46
44
|
|
|
47
|
-
@override
|
|
48
45
|
def expected_structure(self, parent_schema: tuple['MeasurementTypeAdapter.DataDescriptor', ...]) -> tuple['MeasurementTypeAdapter.DataDescriptor', ...]:
|
|
49
46
|
structure = []
|
|
50
47
|
for (x, y) in itertools.batched(parent_schema, 2):
|
|
@@ -65,7 +62,6 @@ class SavgolNumericalDerivative(AnalysisTypeAdapter):
|
|
|
65
62
|
]
|
|
66
63
|
return tuple(structure)
|
|
67
64
|
|
|
68
|
-
@override
|
|
69
65
|
def default_views(self, parent_schema: tuple['MeasurementTypeAdapter.DataDescriptor', ...]) -> dict[str, DataView]:
|
|
70
66
|
schema = self.expected_structure(parent_schema)
|
|
71
67
|
variable_names = (schema[0].name.split('_')[0], schema[1].name.split('_')[0])
|
|
@@ -363,18 +363,23 @@ class QFIT(object):
|
|
|
363
363
|
return
|
|
364
364
|
|
|
365
365
|
else: #use specified entries
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
366
|
+
for entry in entries:
|
|
367
|
+
if entry.startswith('/'):
|
|
368
|
+
# This is an absolute path, just take it.
|
|
369
|
+
urls.append(entry)
|
|
370
|
+
else:
|
|
371
|
+
# This is a relative path, and likely an implicit reference to /entry/data0/...
|
|
372
|
+
# We need to search for it.
|
|
373
|
+
for category in self.hf['/entry/'].keys():
|
|
374
|
+
if category == 'views':
|
|
375
|
+
continue
|
|
376
|
+
path_candidate = '/entry/' + category + '/' + entry
|
|
372
377
|
try:
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
+
self.hf[path_candidate]
|
|
379
|
+
urls.append(path_candidate)
|
|
380
|
+
break
|
|
381
|
+
except KeyError:
|
|
382
|
+
pass
|
|
378
383
|
|
|
379
384
|
self.hf.close()
|
|
380
385
|
#cast to real strings in case the urls ended up to be unicode
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from typing import Callable
|
|
2
|
+
|
|
3
|
+
import numpy as np
|
|
4
|
+
|
|
5
|
+
from qkit.measure.unified_measurements import AnalysisTypeAdapter, MeasurementTypeAdapter
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class RabiPeakTracker(AnalysisTypeAdapter):
|
|
9
|
+
|
|
10
|
+
def __init__(self, dataset_phrase : str, post_hook: Callable[[float], None]) -> None:
|
|
11
|
+
self.dataset_phrase = dataset_phrase
|
|
12
|
+
self.post_hook = post_hook
|
|
13
|
+
self.result_descriptor = MeasurementTypeAdapter.DataDescriptor("rabi_peak", tuple(), unit='Hz', category='analysis')
|
|
14
|
+
|
|
15
|
+
def expected_structure(self, parent_schema: tuple['MeasurementTypeAdapter.DataDescriptor', ...]) -> tuple[
|
|
16
|
+
'MeasurementTypeAdapter.DataDescriptor', ...]:
|
|
17
|
+
return (self.result_descriptor,)
|
|
18
|
+
|
|
19
|
+
def perform_analysis(self, data: tuple['MeasurementTypeAdapter.GeneratedData', ...]) -> tuple[
|
|
20
|
+
'MeasurementTypeAdapter.GeneratedData', ...]:
|
|
21
|
+
data = [datum for datum in data if self.dataset_phrase in datum.descriptor.name][0]
|
|
22
|
+
x_axis = data.descriptor.axes[0].range
|
|
23
|
+
signal_strength = np.std(data.data, axis=-1)
|
|
24
|
+
maximum_frequency = x_axis[np.argmax(signal_strength)]
|
|
25
|
+
self.post_hook(maximum_frequency)
|
|
26
|
+
return (self.result_descriptor.with_data(maximum_frequency),)
|
|
27
|
+
|
|
@@ -70,7 +70,9 @@ class Insttools(object):
|
|
|
70
70
|
self._user_instdir = qkit.cfg.get('user_instruments_dir')
|
|
71
71
|
lookup_dict_location = qkit.cfg.get('device_lookup_config')
|
|
72
72
|
if lookup_dict_location is not None:
|
|
73
|
-
|
|
73
|
+
logging.info(f"Loading devices configuration from {lookup_dict_location}")
|
|
74
|
+
with open(lookup_dict_location, "rb") as f:
|
|
75
|
+
self._lookup_dict = tomli.load(f)
|
|
74
76
|
else:
|
|
75
77
|
self._lookup_dict = {}
|
|
76
78
|
|
|
@@ -264,14 +266,14 @@ class Insttools(object):
|
|
|
264
266
|
f.write(descr)
|
|
265
267
|
return self.get(name)
|
|
266
268
|
|
|
267
|
-
def create_from_config(self,
|
|
269
|
+
def create_from_config(self, identifier, registered_name, **kwargs):
|
|
268
270
|
"""
|
|
269
|
-
Check in the local config file for the device name
|
|
271
|
+
Check in the local config file for the device name `registered_name`. If it exists, take the config from there to create the device.
|
|
270
272
|
|
|
271
273
|
Override with values from keyword arguments.
|
|
272
274
|
"""
|
|
273
275
|
# This merges the configuration dict with
|
|
274
|
-
config = {**self._lookup_dict[
|
|
276
|
+
config = {**self._lookup_dict[registered_name], **kwargs, 'name': identifier}
|
|
275
277
|
return self.create(**config)
|
|
276
278
|
|
|
277
279
|
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from types import NoneType
|
|
3
|
+
|
|
4
|
+
from laboneq.dsl.device import DeviceSetup
|
|
5
|
+
from laboneq.dsl.quantum import QPU, QuantumParameters
|
|
6
|
+
from laboneq.dsl.quantum.quantum_element import AttrDict, QuantumElement
|
|
7
|
+
from laboneq.dsl.session import Session
|
|
8
|
+
from laboneq_applications.qpu_types.tunable_transmon import TunableTransmonQubit, TunableTransmonOperations
|
|
9
|
+
|
|
10
|
+
from qkit.core.instrument_base import Instrument
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ZISetup(Instrument):
|
|
14
|
+
|
|
15
|
+
def __init__(self, name: str, address: str, descriptor, **kwargs):
|
|
16
|
+
super().__init__(name, **kwargs)
|
|
17
|
+
self._setup = DeviceSetup.from_descriptor(descriptor, address)
|
|
18
|
+
self._session = Session(self._setup, log_level=logging.WARNING)
|
|
19
|
+
self._session.connect(reset_devices=True)
|
|
20
|
+
self._qubits = TunableTransmonQubit.from_device_setup(self._setup)
|
|
21
|
+
|
|
22
|
+
# Register parameters for each qubit.
|
|
23
|
+
parameters: QuantumParameters = self._qubits[0].parameters
|
|
24
|
+
attributes = [entry for entry in dir(parameters) if not entry.startswith('_') and not callable(getattr(parameters, entry))]
|
|
25
|
+
for key in attributes:
|
|
26
|
+
inferred_type = type(getattr(parameters, key))
|
|
27
|
+
if inferred_type is int:
|
|
28
|
+
inferred_type = float
|
|
29
|
+
if inferred_type is AttrDict:
|
|
30
|
+
inferred_type = dict
|
|
31
|
+
elif inferred_type is NoneType:
|
|
32
|
+
inferred_type = float
|
|
33
|
+
self.add_parameter(key, channels=(0, len(self._qubits)-1), type=inferred_type, flags=Instrument.FLAG_GETSET,
|
|
34
|
+
get_func=lambda channel, _key=key: getattr(self.get_qubit(channel).parameters, _key),
|
|
35
|
+
set_func=lambda value, channel, _key=key: setattr(self.get_qubit(channel).parameters, _key, value))
|
|
36
|
+
|
|
37
|
+
def get_qpu(self) -> QPU:
|
|
38
|
+
return QPU(self._qubits, quantum_operations=TunableTransmonOperations())
|
|
39
|
+
|
|
40
|
+
def get_qubit(self, index: int) -> QuantumElement:
|
|
41
|
+
return self._qubits[index]
|
|
42
|
+
|
|
43
|
+
def get_session(self):
|
|
44
|
+
return self._session
|