qkit 0.5.2__tar.gz → 0.5.3__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.
Files changed (441) hide show
  1. qkit-0.5.3/.git +1 -0
  2. {qkit-0.5.2 → qkit-0.5.3}/PKG-INFO +4 -5
  3. {qkit-0.5.2 → qkit-0.5.3}/pyproject.toml +3 -2
  4. qkit-0.5.3/src/qkit/_version.py +1 -0
  5. qkit-0.5.3/src/qkit/analysis/circle_fit/another_circle_fit.py +66 -0
  6. qkit-0.5.3/src/qkit/analysis/numerical_derivative.py +87 -0
  7. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/lib/file_service/breadcrumbs.py +3 -3
  8. qkit-0.5.3/src/qkit/drivers/AbstractIVDevice.py +48 -0
  9. qkit-0.5.3/src/qkit/drivers/AbstractThermometer.py +21 -0
  10. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/gui/plot/url_launcher.py +1 -1
  11. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/install/install.py +13 -13
  12. qkit-0.5.3/src/qkit/measure/laboneq_measurement.py +83 -0
  13. qkit-0.5.3/src/qkit/measure/spectroscopy/spectroscopy_measurement.py +52 -0
  14. qkit-0.5.3/src/qkit/measure/thermometry_measurement.py +34 -0
  15. qkit-0.5.3/src/qkit/measure/transport_measurement.py +141 -0
  16. qkit-0.5.3/src/qkit/measure/unified_measurements.py +881 -0
  17. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/storage/hdf_dataset.py +4 -3
  18. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/storage/store.py +17 -1
  19. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/templates/Measurements/Probestation.ipynb +18 -89
  20. qkit-0.5.3/tests/core/.7c57581a89db.breadcrumb +4 -0
  21. qkit-0.5.3/tests/core/.7c57581a89db.breadcrumb.lock +0 -0
  22. qkit-0.5.3/tests/core/STUVWX_dummy.h5 +0 -0
  23. qkit-0.5.3/tests/core/subdir/YZ0123_dummy.h5 +0 -0
  24. {qkit-0.5.2 → qkit-0.5.3}/tests/core/test_file_info_database.py +1 -0
  25. qkit-0.5.3/tests/measure/.gitignore +1 -0
  26. qkit-0.5.3/tests/measure/test.h5 +0 -0
  27. qkit-0.5.3/tests/measure/test_unified_syntax.py +217 -0
  28. qkit-0.5.3/tests/storage/.gitignore +1 -0
  29. qkit-0.5.3/tests/storage/large_file.h5 +0 -0
  30. {qkit-0.5.2 → qkit-0.5.3}/tests/url/test_url_handler.py +2 -0
  31. qkit-0.5.2/src/qkit/_version.py +0 -1
  32. {qkit-0.5.2 → qkit-0.5.3}/.gitattributes +0 -0
  33. {qkit-0.5.2 → qkit-0.5.3}/.github/workflows/release.yml +0 -0
  34. {qkit-0.5.2 → qkit-0.5.3}/.github/workflows/test.yml +0 -0
  35. {qkit-0.5.2 → qkit-0.5.3}/.gitignore +0 -0
  36. {qkit-0.5.2 → qkit-0.5.3}/.travis.yml +0 -0
  37. {qkit-0.5.2 → qkit-0.5.3}/AUTHORS +0 -0
  38. {qkit-0.5.2 → qkit-0.5.3}/CITATION.cff +0 -0
  39. {qkit-0.5.2 → qkit-0.5.3}/LICENSE +0 -0
  40. {qkit-0.5.2 → qkit-0.5.3}/README.md +0 -0
  41. {qkit-0.5.2 → qkit-0.5.3}/devices.toml.example +0 -0
  42. {qkit-0.5.2 → qkit-0.5.3}/doc/.gitignore +0 -0
  43. {qkit-0.5.2 → qkit-0.5.3}/doc/Makefile +0 -0
  44. {qkit-0.5.2 → qkit-0.5.3}/doc/make.bat +0 -0
  45. {qkit-0.5.2 → qkit-0.5.3}/doc/sample_data/1Q-NIST.json +0 -0
  46. {qkit-0.5.2 → qkit-0.5.3}/doc/sample_data/P8PPH2_anticrossing_sample_data.h5 +0 -0
  47. {qkit-0.5.2 → qkit-0.5.3}/doc/sample_data/QZQ3H8.sample +0 -0
  48. {qkit-0.5.2 → qkit-0.5.3}/doc/source/conf.py +0 -0
  49. {qkit-0.5.2 → qkit-0.5.3}/doc/source/index.rst +0 -0
  50. {qkit-0.5.2 → qkit-0.5.3}/doc/source/installation.rst +0 -0
  51. {qkit-0.5.2 → qkit-0.5.3}/doc/source/modules.rst +0 -0
  52. {qkit-0.5.2 → qkit-0.5.3}/doc/source/qkit.analysis.circle_fit.rst +0 -0
  53. {qkit-0.5.2 → qkit-0.5.3}/doc/source/qkit.analysis.rst +0 -0
  54. {qkit-0.5.2 → qkit-0.5.3}/doc/source/qkit.config.rst +0 -0
  55. {qkit-0.5.2 → qkit-0.5.3}/doc/source/qkit.core.lib.com.rst +0 -0
  56. {qkit-0.5.2 → qkit-0.5.3}/doc/source/qkit.core.lib.devices.rst +0 -0
  57. {qkit-0.5.2 → qkit-0.5.3}/doc/source/qkit.core.lib.file_service.rst +0 -0
  58. {qkit-0.5.2 → qkit-0.5.3}/doc/source/qkit.core.lib.network.rst +0 -0
  59. {qkit-0.5.2 → qkit-0.5.3}/doc/source/qkit.core.lib.rst +0 -0
  60. {qkit-0.5.2 → qkit-0.5.3}/doc/source/qkit.core.rst +0 -0
  61. {qkit-0.5.2 → qkit-0.5.3}/doc/source/qkit.core.s_init.bkup.rst +0 -0
  62. {qkit-0.5.2 → qkit-0.5.3}/doc/source/qkit.core.s_init.rst +0 -0
  63. {qkit-0.5.2 → qkit-0.5.3}/doc/source/qkit.gui.notebook.rst +0 -0
  64. {qkit-0.5.2 → qkit-0.5.3}/doc/source/qkit.gui.plot.rst +0 -0
  65. {qkit-0.5.2 → qkit-0.5.3}/doc/source/qkit.gui.qviewkit.rst +0 -0
  66. {qkit-0.5.2 → qkit-0.5.3}/doc/source/qkit.gui.rst +0 -0
  67. {qkit-0.5.2 → qkit-0.5.3}/doc/source/qkit.instruments.rst +0 -0
  68. {qkit-0.5.2 → qkit-0.5.3}/doc/source/qkit.logs.rst +0 -0
  69. {qkit-0.5.2 → qkit-0.5.3}/doc/source/qkit.measure.rst +0 -0
  70. {qkit-0.5.2 → qkit-0.5.3}/doc/source/qkit.measure.spectroscopy.rst +0 -0
  71. {qkit-0.5.2 → qkit-0.5.3}/doc/source/qkit.measure.timedomain.awg.rst +0 -0
  72. {qkit-0.5.2 → qkit-0.5.3}/doc/source/qkit.measure.timedomain.rst +0 -0
  73. {qkit-0.5.2 → qkit-0.5.3}/doc/source/qkit.measure.transport.rst +0 -0
  74. {qkit-0.5.2 → qkit-0.5.3}/doc/source/qkit.rst +0 -0
  75. {qkit-0.5.2 → qkit-0.5.3}/doc/source/qkit.services.qplexkit.rst +0 -0
  76. {qkit-0.5.2 → qkit-0.5.3}/doc/source/qkit.services.qsurveilkit.rst +0 -0
  77. {qkit-0.5.2 → qkit-0.5.3}/doc/source/qkit.services.raspi_misc.rst +0 -0
  78. {qkit-0.5.2 → qkit-0.5.3}/doc/source/qkit.services.rst +0 -0
  79. {qkit-0.5.2 → qkit-0.5.3}/doc/source/qkit.storage.rst +0 -0
  80. {qkit-0.5.2 → qkit-0.5.3}/images/Qkit_Logo.png +0 -0
  81. {qkit-0.5.2 → qkit-0.5.3}/images/Qkit_Logo.svg +0 -0
  82. {qkit-0.5.2 → qkit-0.5.3}/images/Qkit_QRcode.png +0 -0
  83. {qkit-0.5.2 → qkit-0.5.3}/images/Qkit_QRcode.svg +0 -0
  84. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/__init__.py +0 -0
  85. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/analysis/CurveXtractor.py +0 -0
  86. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/analysis/IV_curve.py +0 -0
  87. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/analysis/IV_curve2.py +0 -0
  88. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/analysis/IV_curve3.py +0 -0
  89. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/analysis/Manual point picker.ipynb_template +0 -0
  90. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/analysis/__init__.py +0 -0
  91. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/analysis/avoided_crossing_fit.py +0 -0
  92. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/analysis/circle_fit/__init__.py +0 -0
  93. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/analysis/circle_fit/circle_fit_2019/__init__.py +0 -0
  94. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/analysis/circle_fit/circle_fit_2019/circuit.py +0 -0
  95. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/analysis/circle_fit/circle_fit_classic/__init__.py +0 -0
  96. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/analysis/circle_fit/circle_fit_classic/calibration.py +0 -0
  97. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/analysis/circle_fit/circle_fit_classic/circlefit.py +0 -0
  98. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/analysis/circle_fit/circle_fit_classic/circuit.py +0 -0
  99. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/analysis/circle_fit/circle_fit_classic/utilities.py +0 -0
  100. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/analysis/iq_cloud_analysis.ipynb_template +0 -0
  101. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/analysis/iq_cloud_analysis.py +0 -0
  102. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/analysis/manual_point_picker.py +0 -0
  103. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/analysis/pointtracker.py +0 -0
  104. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/analysis/qdata.py +0 -0
  105. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/analysis/qfit.py +0 -0
  106. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/analysis/qps_rings.py +0 -0
  107. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/analysis/resonator.py +0 -0
  108. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/analysis/sonnet_parser.py +0 -0
  109. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/analysis/spectroscopy.py +0 -0
  110. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/analysis/timedomain.py +0 -0
  111. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/analysis/uncertainties_utilities.py +0 -0
  112. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/config/.gitignore +0 -0
  113. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/config/README.md +0 -0
  114. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/config/__init__.py +0 -0
  115. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/config/config_holder.py +0 -0
  116. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/config/environment.py +0 -0
  117. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/config/local.py_template +0 -0
  118. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/config/services.py_template +0 -0
  119. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/.gitignore +0 -0
  120. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/README +0 -0
  121. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/VERSION +0 -0
  122. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/__init__.py +0 -0
  123. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/flow.py +0 -0
  124. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/instrument_base.py +0 -0
  125. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/instrument_basev2.py +0 -0
  126. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/instrument_tools.py +0 -0
  127. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/lib/__init__.py +0 -0
  128. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/lib/com/__init__.py +0 -0
  129. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/lib/com/info_client.py +0 -0
  130. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/lib/com/info_service.py +0 -0
  131. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/lib/com/ri_client.py +0 -0
  132. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/lib/com/ri_service.py +0 -0
  133. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/lib/com/signals.py +0 -0
  134. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/lib/file_service/__init__.py +0 -0
  135. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/lib/file_service/file_info_database.py +0 -0
  136. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/lib/file_service/file_info_database_lib.py +0 -0
  137. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/lib/list_dict_DB.py +0 -0
  138. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/lib/misc.py +0 -0
  139. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/lib/network/__init__.py +0 -0
  140. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/lib/network/tcpclient.py +0 -0
  141. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/lib/temp.py +0 -0
  142. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/s_init/S10_logging.py +0 -0
  143. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/s_init/S14_setup_directories.py +0 -0
  144. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/s_init/S16_available_modules.py +0 -0
  145. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/s_init/S20_check_for_updates.py +0 -0
  146. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/s_init/S25_info_service.py +0 -0
  147. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/s_init/S30_qkit_start.py +0 -0
  148. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/s_init/S65_load_RI_service.py +0 -0
  149. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/s_init/S70_load_visa.py +0 -0
  150. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/s_init/S80_load_file_service.py +0 -0
  151. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/s_init/S85_init_measurement.py +0 -0
  152. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/s_init/S98_started.py +0 -0
  153. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/s_init/S99_init_user.py +0 -0
  154. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/s_init/_30_network_server.py +0 -0
  155. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/s_init/_80_create_instruments.py +0 -0
  156. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/s_init/__init__.py +0 -0
  157. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/core/startup.py +0 -0
  158. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/ADwinProII_SMU.py +0 -0
  159. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/AbstractMicrowaveSource.py +0 -0
  160. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/AbstractVNA.py +0 -0
  161. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Agilent_DSO.py +0 -0
  162. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Agilent_E8257D.py +0 -0
  163. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Agilent_PNAX.py +0 -0
  164. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Agilent_TwissTorr74.py +0 -0
  165. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Agilent_VNA_E5071C.py +0 -0
  166. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/AnaPico_APUASYN20.py +0 -0
  167. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Anritsu_MG37022.py +0 -0
  168. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Anritsu_MS2830A.py +0 -0
  169. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Anritsu_VNA.py +0 -0
  170. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Anritsu_VNA_MS4642B.py +0 -0
  171. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/BKPrecision_9242.py +0 -0
  172. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Bluefors_GHS.py +0 -0
  173. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Caen_FAST_PS.py +0 -0
  174. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/DC_DAC_LTC2666.py +0 -0
  175. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/DummyVNA.py +0 -0
  176. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/EA_PS9360.py +0 -0
  177. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/ERASynth.py +0 -0
  178. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/EdwardsActiveDigitalController.py +0 -0
  179. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/EthernetNode.py +0 -0
  180. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/EthernetServer.py +0 -0
  181. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/EthernetServerWin.py +0 -0
  182. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/FTDI_DAQ.py +0 -0
  183. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Faulhaber_3564K024B_C.py +0 -0
  184. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/GHzDAC.py +0 -0
  185. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/HP_34401A.py +0 -0
  186. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/HP_81110A.py +0 -0
  187. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/IQ_Mixer.py +0 -0
  188. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/IVD_dummy.py +0 -0
  189. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/IVVI_BiasDAC.py +0 -0
  190. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Inficon.py +0 -0
  191. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Keithley.py +0 -0
  192. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Keithley_2000.py +0 -0
  193. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Keithley_2450.py +0 -0
  194. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Keithley_2636A.py +0 -0
  195. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Keysight_35670A.py +0 -0
  196. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Keysight_B2900.py +0 -0
  197. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Keysight_E8267D.py +0 -0
  198. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Keysight_N5173B.py +0 -0
  199. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Keysight_VNA_E5071C.py +0 -0
  200. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Keysight_VNA_E5080B.py +0 -0
  201. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Keysight_VNA_E5080B_spectrum.py +0 -0
  202. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Keysight_VNA_P9375A.py +0 -0
  203. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Lmx2595.py +0 -0
  204. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/MKS_647C.py +0 -0
  205. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/MicroMag3.py +0 -0
  206. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/ModernDriverTest.py +0 -0
  207. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/NI_DAQ.py +0 -0
  208. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/NI_DAQ_IV.py +0 -0
  209. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/OxfordInstruments_Kelvinox_IGH.py +0 -0
  210. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Oxford_ITC503.py +0 -0
  211. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Oxford_Triton.py +0 -0
  212. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/RFPCB.py +0 -0
  213. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/RFPCBJ.py +0 -0
  214. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/RFPCB_V2.py +0 -0
  215. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/RS_FSUP.py +0 -0
  216. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/RS_SGMA.py +0 -0
  217. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/RS_VNA_ZNAXX.py +0 -0
  218. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/RT_MW_Switch.py +0 -0
  219. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/SR_830.py +0 -0
  220. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/SerialPortCommunication.py +0 -0
  221. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Spectrum_M2i2030.py +0 -0
  222. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Spectrum_M3i2132.py +0 -0
  223. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Spectrum_M4i2211.py +0 -0
  224. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/StepAttenuator.py +0 -0
  225. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/StepMotor.py +0 -0
  226. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Tabor_WX1284C.py +0 -0
  227. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Tektronix_AWG5014.py +0 -0
  228. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Tektronix_AWG520.py +0 -0
  229. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Tektronix_AWG7062.py +0 -0
  230. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Tektronix_PWS4205.py +0 -0
  231. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Teslameter_FM302.py +0 -0
  232. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Tunnel_DAC.py +0 -0
  233. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/VCAs_TD.py +0 -0
  234. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/VNA_dummy.py +0 -0
  235. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Virtual_Coil.py +0 -0
  236. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Virtual_Current_Source.py +0 -0
  237. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Virtual_VCA.py +0 -0
  238. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Windfreak_calibration_files/Readme.txt +0 -0
  239. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_288_ChannelA.cal +0 -0
  240. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_288_ChannelB.cal +0 -0
  241. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_289_ChannelA.cal +0 -0
  242. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_289_ChannelB.cal +0 -0
  243. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelA.cal +0 -0
  244. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelA_calibration_with_freq_and_pow +0 -0
  245. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelA_calibration_with_freq_and_pow.npy +0 -0
  246. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelA_calibration_with_freq_and_pow_calibration_matrix_dBm.txt +0 -0
  247. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelA_calibration_with_freq_and_pow_frequency_Hz.txt +0 -0
  248. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelA_calibration_with_freq_and_pow_power_intrinsic_units.txt +0 -0
  249. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelB.cal +0 -0
  250. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelB_calibration_with_freq_and_pow +0 -0
  251. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelB_calibration_with_freq_and_pow.npy +0 -0
  252. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelB_calibration_with_freq_and_pow_calibration_matrix_dBm.txt +0 -0
  253. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelB_calibration_with_freq_and_pow_frequency_Hz.txt +0 -0
  254. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelB_calibration_with_freq_and_pow_power_intrinsic_units.txt +0 -0
  255. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Windfreak_calibration_files/convert_files_to_python_3.ipynb +0 -0
  256. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Windfreak_calibration_files/test_open_file_python3.ipynb +0 -0
  257. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Windfreaktech916.py +0 -0
  258. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Windfreaktech_SynthHD.cal +0 -0
  259. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Windfreaktech_SynthHD.py +0 -0
  260. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Yokogawa.py +0 -0
  261. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Yokogawa_GS200.py +0 -0
  262. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Yokogawa_GS210.py +0 -0
  263. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/Yokogawa_GS820.py +0 -0
  264. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/ZHInstSHFQC.py +0 -0
  265. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/ZHInst_Abstract.py +0 -0
  266. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/ZHInst_Abstractv2.py +0 -0
  267. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/ZHInst_PQSC.py +0 -0
  268. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/ZHInst_SHFSG.py +0 -0
  269. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/ZHInst_SHFSGv2.py +0 -0
  270. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/ZHInst_UHFQA.py +0 -0
  271. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/ZHInst_UHFQAv2.py +0 -0
  272. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/ZHInst_Virtual_VNA.py +0 -0
  273. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/ZHInst_Virtual_VNAv2.py +0 -0
  274. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/ZHInst_Waveforms/CPMG.json +0 -0
  275. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/ZHInst_Waveforms/CPMG.seq +0 -0
  276. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/ZHInst_Waveforms/rabi.json +0 -0
  277. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/ZHInst_Waveforms/rabi.seq +0 -0
  278. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/ZHInst_Waveforms/ramsey.json +0 -0
  279. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/ZHInst_Waveforms/ramsey.seq +0 -0
  280. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/_Spectrum_M3i2132/__init__.py +0 -0
  281. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/_Spectrum_M3i2132/errors.py +0 -0
  282. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/_Spectrum_M3i2132/regs.py +0 -0
  283. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/_Spectrum_M4i2211/__init__.py +0 -0
  284. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/_Spectrum_M4i2211/errors.py +0 -0
  285. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/_Spectrum_M4i2211/h2py.py +0 -0
  286. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/_Spectrum_M4i2211/regs.py +0 -0
  287. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/__init__.py +0 -0
  288. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/agilent_33210A.py +0 -0
  289. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/dll_support_nidaq.py +0 -0
  290. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/manual_settings.py +0 -0
  291. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/mfc_dummy.py +0 -0
  292. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/nidaq_syncIV.py +0 -0
  293. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/ohmmeter_dummy.py +0 -0
  294. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/qdevil_qdacII.py +0 -0
  295. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/qplexkit_client.py +0 -0
  296. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/quartz_dummy.py +0 -0
  297. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/switch_client.py +0 -0
  298. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/te_opto_dac.py +0 -0
  299. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/tip2_client.py +0 -0
  300. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/tip_client.py +0 -0
  301. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/two_port_switch.py +0 -0
  302. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/virtual_MultiplexingReadout.py +0 -0
  303. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/virtual_VNA_quantum_machines.py +0 -0
  304. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/virtual_magnet.py +0 -0
  305. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/virtual_measure_spec.py +0 -0
  306. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/virtual_pwsMagnet.py +0 -0
  307. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/virtual_step_attenuator.py +0 -0
  308. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/virtual_temperature_UFO.py +0 -0
  309. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/virtual_tunnel_electronic.py +0 -0
  310. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/virtual_yokomagnet.py +0 -0
  311. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/drivers/visa_prologix.py +0 -0
  312. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/gui/__init__.py +0 -0
  313. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/gui/notebook/Progress_Bar.py +0 -0
  314. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/gui/notebook/Stopwatch.py +0 -0
  315. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/gui/notebook/__init__.py +0 -0
  316. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/gui/notebook/quickplot.py +0 -0
  317. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/gui/notebook/wf_plot.py +0 -0
  318. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/gui/plot/__init__.py +0 -0
  319. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/gui/plot/plot.py +0 -0
  320. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/gui/qviewkit/DatasetsWindow.py +0 -0
  321. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/gui/qviewkit/PlotWindow.py +0 -0
  322. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/gui/qviewkit/PlotWindow_lib.py +0 -0
  323. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/gui/qviewkit/__init__.py +0 -0
  324. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/gui/qviewkit/info_subsys.py +0 -0
  325. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/gui/qviewkit/main.py +0 -0
  326. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/gui/qviewkit/main_view.py +0 -0
  327. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/gui/qviewkit/pg_time_axis.py +0 -0
  328. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/gui/qviewkit/plot_view.py +0 -0
  329. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/gui/qviewkit/qviewkit.bat +0 -0
  330. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/install/jupyter_lab_config.py-tpl +0 -0
  331. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/install/linux/qkit-jupyter-lab.desktop +0 -0
  332. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/install/linux/qkit-qviewkit-url.desktop +0 -0
  333. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/install/linux/qkit-qviewkit.desktop +0 -0
  334. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/install/qkit_local_config.py-tpl +0 -0
  335. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/__init__.py +0 -0
  336. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/json_handler.py +0 -0
  337. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/measurement_base.py +0 -0
  338. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/measurement_class.py +0 -0
  339. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/samples_class.py +0 -0
  340. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/spectroscopy/README.md +0 -0
  341. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/spectroscopy/__init__.py +0 -0
  342. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/spectroscopy/signal_spectroscopy.py +0 -0
  343. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/spectroscopy/spectroscopy.py +0 -0
  344. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/spectroscopy/spectroscopy_unified.py +0 -0
  345. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/timedomain/002_TD1_f01_rabi_t1_ramsey.ipynb +0 -0
  346. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/timedomain/VirtualAWG.py +0 -0
  347. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/timedomain/__init__.py +0 -0
  348. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/timedomain/awg/__init__.py +0 -0
  349. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/timedomain/awg/generate_waveform.py +0 -0
  350. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/timedomain/awg/load_awg.py +0 -0
  351. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/timedomain/awg/load_tawg.py +0 -0
  352. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/timedomain/awg/tomography.py +0 -0
  353. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/timedomain/gate_func.py +0 -0
  354. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/timedomain/initialize.py +0 -0
  355. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/timedomain/measure_ZI_td.py +0 -0
  356. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/timedomain/measure_td.py +0 -0
  357. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/timedomain/pulse_sequence.py +0 -0
  358. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/timedomain/quantum_machine/__init__.py +0 -0
  359. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/timedomain/quantum_machine/basic_qubit_experiments.py +0 -0
  360. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/timedomain/quantum_machine/basic_qubit_experiments_V2.py +0 -0
  361. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/timedomain/quantum_machine/pulses.py +0 -0
  362. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/timedomain/quantum_machine/qm_qkit_wrapper.py +0 -0
  363. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/timedomain/quantum_machine/qm_qubit_config.py +0 -0
  364. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/timedomain/quantum_machine/qm_qubit_config_V2.py +0 -0
  365. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/timedomain/quantum_machine/quantum_jump_monitoring.py +0 -0
  366. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/timedomain/quantum_machine/qubit_high_temp.py +0 -0
  367. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/timedomain/quantum_machine/script.py +0 -0
  368. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/timedomain/quantum_machine/script_pyqt.py +0 -0
  369. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/timedomain/sequence_library.py +0 -0
  370. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/transport/__init__.py +0 -0
  371. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/transport/transport.py +0 -0
  372. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/measure/write_additional_files.py +0 -0
  373. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/__init__.py +0 -0
  374. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/qdepokit/Deposition_template.ipynb +0 -0
  375. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/qdepokit/__init__.py +0 -0
  376. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/qdepokit/sdi.py +0 -0
  377. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/qplexkit/.gitignore +0 -0
  378. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/qplexkit/__init__.py +0 -0
  379. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/qplexkit/ccr.json_template +0 -0
  380. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/qplexkit/install_systemd_service.sh +0 -0
  381. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/qplexkit/pcf8575.py +0 -0
  382. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/qplexkit/qplexkit.py +0 -0
  383. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/qplexkit/server.py +0 -0
  384. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/qplexkit/test_PCF8575.py +0 -0
  385. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/qsurveilkit/README.md +0 -0
  386. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/qsurveilkit/__init__.py +0 -0
  387. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/qsurveilkit/client_main.py +0 -0
  388. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/qsurveilkit/data_class.py +0 -0
  389. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/qsurveilkit/plasma1_gui.py +0 -0
  390. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/qsurveilkit/plasma1_gui.ui +0 -0
  391. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/qsurveilkit/server_main.py_template +0 -0
  392. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/qsurveilkit/settings.cfg_template +0 -0
  393. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/qsurveilkit/srv_thread.py +0 -0
  394. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/qsurveilkit/worker.py +0 -0
  395. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/raspi_misc/OxfordInstruments_Kelvinox_IGH_serial.py +0 -0
  396. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/raspi_misc/RT_switch/__init__.py +0 -0
  397. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/raspi_misc/RT_switch/switchbox_server.py +0 -0
  398. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/raspi_misc/RT_switch/two_port_switch_manual_client.py +0 -0
  399. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/raspi_misc/__init__.py +0 -0
  400. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/raspi_misc/dc_dac/DAC_LTC2666_communication.py +0 -0
  401. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/raspi_misc/dc_dac/__init__.py +0 -0
  402. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/raspi_misc/dc_dac/server.py +0 -0
  403. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/raspi_misc/edwards/EdwardsActiveDigitalController.py +0 -0
  404. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/raspi_misc/edwards/EdwardsBridgeReadout.py +0 -0
  405. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/raspi_misc/edwards/__init__.py +0 -0
  406. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/raspi_misc/edwards/edw_client.py +0 -0
  407. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/raspi_misc/edwards/edw_server.py +0 -0
  408. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/raspi_misc/erasynth_server.py +0 -0
  409. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/raspi_misc/nitrogen/__init__.py +0 -0
  410. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/raspi_misc/nitrogen/nitrogen_controller.py +0 -0
  411. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/raspi_misc/nitrogen/nitrogen_server.py +0 -0
  412. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/raspi_misc/nitrogen/refill_manual.py +0 -0
  413. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/raspi_misc/nitrogen/refilling_switch_off.py +0 -0
  414. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/raspi_misc/nitrogen/refilling_switch_on.py +0 -0
  415. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/raspi_misc/nitrogen/sendMail.py +0 -0
  416. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/raspi_misc/step_attenuator_server.py +0 -0
  417. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/raspi_misc/step_motor.py +0 -0
  418. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/raspi_misc/tip/__init__.py +0 -0
  419. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/raspi_misc/tip/fridge_monitoring.py +0 -0
  420. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/switchbox/lib_oled96.py +0 -0
  421. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/switchbox/server.py +0 -0
  422. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/services/switchbox/switch.py +0 -0
  423. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/storage/README.md +0 -0
  424. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/storage/__init__.py +0 -0
  425. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/storage/hdf_DateTimeGenerator.py +0 -0
  426. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/storage/hdf_constants.py +0 -0
  427. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/storage/hdf_file.py +0 -0
  428. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/storage/hdf_lib.py +0 -0
  429. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/storage/hdf_view.py +0 -0
  430. {qkit-0.5.2 → qkit-0.5.3}/src/qkit/templates/Analysis/Probestation.ipynb +0 -0
  431. {qkit-0.5.2 → qkit-0.5.3}/tests/__init__.py +0 -0
  432. /qkit-0.5.2/tests/breadcrumb/STUVWX_dummy.h5 → /qkit-0.5.3/tests/analysis/test_new_circlefit.py +0 -0
  433. {qkit-0.5.2 → qkit-0.5.3}/tests/breadcrumb/.1337deadbeef.breadcrumb +0 -0
  434. /qkit-0.5.2/tests/core/STUVWX_dummy.h5 → /qkit-0.5.3/tests/breadcrumb/.7c57581a89db.breadcrumb.lock +0 -0
  435. {qkit-0.5.2 → qkit-0.5.3}/tests/breadcrumb/.deadbeef1337.breadcrumb +0 -0
  436. {qkit-0.5.2 → qkit-0.5.3}/tests/breadcrumb/.gitignore +0 -0
  437. /qkit-0.5.2/tests/core/subdir/YZ0123_dummy.h5 → /qkit-0.5.3/tests/breadcrumb/STUVWX_dummy.h5 +0 -0
  438. {qkit-0.5.2 → qkit-0.5.3}/tests/breadcrumb/test_breadcrumbs.py +0 -0
  439. {qkit-0.5.2 → qkit-0.5.3}/tests/core/.gitignore +0 -0
  440. {qkit-0.5.2 → qkit-0.5.3}/tests/storage/test_hdf5.py +0 -0
  441. {qkit-0.5.2 → qkit-0.5.3}/tests/test_qkit_basics.py +0 -0
qkit-0.5.3/.git ADDED
@@ -0,0 +1 @@
1
+ gitdir: ../.git/modules/qkit
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.3
2
2
  Name: qkit
3
- Version: 0.5.2
3
+ Version: 0.5.3
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,8 +345,6 @@ 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
350
348
  Keywords: Data Acquisition,Framework,Measurement,Quantum
351
349
  Classifier: Framework :: Jupyter :: JupyterLab :: 3
352
350
  Classifier: Intended Audience :: Science/Research
@@ -365,6 +363,7 @@ Requires-Dist: pyvisa>=1.13
365
363
  Requires-Dist: pyzmq>=25
366
364
  Requires-Dist: scipy>=1.10
367
365
  Requires-Dist: tomli>=2.0.1
366
+ Requires-Dist: tqdm>=4.67.0
368
367
  Provides-Extra: analysis
369
368
  Requires-Dist: matplotlib>=3.7; extra == 'analysis'
370
369
  Requires-Dist: peakutils>=1.3; extra == 'analysis'
@@ -380,7 +379,7 @@ Requires-Dist: zerorpc>=0.6; extra == 'timedomain'
380
379
  Provides-Extra: url
381
380
  Requires-Dist: parsita~=2.2.2; extra == 'url'
382
381
  Provides-Extra: zurich-instruments
383
- Requires-Dist: zhinst~=23.2; extra == 'zurich-instruments'
382
+ Requires-Dist: laboneq>=2.59.0; extra == 'zurich-instruments'
384
383
  Description-Content-Type: text/markdown
385
384
 
386
385
  <p align="center">
@@ -32,7 +32,8 @@ dependencies = [
32
32
  "tomli>=2.0.1",
33
33
  "ipython",
34
34
  "packaging",
35
- "filelock>=3.17"
35
+ "filelock>=3.17",
36
+ "tqdm>=4.67.0"
36
37
  ]
37
38
 
38
39
  [project.scripts]
@@ -48,7 +49,7 @@ jupyter = [
48
49
  "ipywidgets>=8.0"
49
50
  ]
50
51
  zurich-instruments = [
51
- "zhinst~=23.2"
52
+ "LabOneQ>=2.59.0"
52
53
  ]
53
54
  analysis = [
54
55
  "matplotlib>=3.7",
@@ -0,0 +1 @@
1
+ __version__ = "0.5.3"
@@ -0,0 +1,66 @@
1
+ import numpy as np
2
+ from sympy import symbols, matrices, Expr, Poly
3
+ from scipy import optimize, linalg
4
+
5
+ # Matrix B from eq. (7)
6
+ CONSTRAINT_MATRIX = np.array([
7
+ [0, 0, 0, -2],
8
+ [0, 1, 0, 0],
9
+ [0, 0, 1, 0],
10
+ [-2, 0, 0, 0]
11
+ ])
12
+
13
+ def compute_moments(z_data: np.ndarray) -> np.ndarray:
14
+ """
15
+ Calculate the moments as defined in eq. 6.
16
+ """
17
+ # Split out data into x (real), y (imag), and z (x**2 + y**2)
18
+ x = z_data.real
19
+ y = z_data.imag
20
+ z = x*x + y*y
21
+ n = np.shape(z_data)[0] # Length of data.
22
+
23
+ # Calculate the sums over x,y,z
24
+ m_x = np.sum(x) # Simple sums
25
+ m_y = np.sum(y)
26
+ m_z = np.sum(z)
27
+
28
+ # Calculate the moments, as sum over the element-wise products
29
+ m_xx = np.sum(x*x)
30
+ m_yy = np.sum(y*y)
31
+ m_zz = np.sum(z*z)
32
+ m_xy = np.sum(x * y)
33
+ m_xz = np.sum(x * z)
34
+ m_yz = np.sum(y * z)
35
+
36
+ # Build the moment matrix
37
+ return np.array([
38
+ [m_zz, m_xz, m_yz, m_z],
39
+ [m_xz, m_xx, m_xy, m_x],
40
+ [m_yz, m_xy, m_yy, m_y],
41
+ [m_z, m_x, m_y, n]
42
+ ])
43
+
44
+ def fit_circle_algebraic(z_data: np.ndarray):
45
+ """
46
+ Fit a circle in the complex plane using a algebraic method.
47
+
48
+ Stable against noise, can be used to get very good start parameters for iterative fit.
49
+ """
50
+ # Build the characteristic polynomial and solve it.
51
+ x = symbols('x')
52
+ M = compute_moments(z_data)
53
+ polynomial: Poly = matrices.det(M - x * CONSTRAINT_MATRIX).as_poly()
54
+ assert polynomial
55
+ derivative = polynomial.diff(x)
56
+ x0, infodict, ier, mesg = optimize.fsolve(polynomial.eval, 0., fprime=derivative.eval)
57
+
58
+ # Retrieve the corresponding EV
59
+ U, s, Vt = np.linalg.svd(M - x0 * CONSTRAINT_MATRIX)
60
+ A_vec = Vt[np.argmin(s), :]
61
+
62
+ # Calculate center position and radius
63
+ x_c = -A_vec[1]/(2 * A_vec[0])
64
+ y_c = -A_vec[2]/(2 * A_vec[0])
65
+ radius = np.sqrt(A_vec[1]*A_vec[1] + A_vec[2] * A_vec[2] - 4 * A_vec[0] * A_vec[3]) / 2 * np.abs(A_vec[0])
66
+ return x_c, y_c, radius
@@ -0,0 +1,87 @@
1
+ import itertools
2
+ from typing import override
3
+
4
+ from scipy import signal
5
+
6
+ from qkit.measure.unified_measurements import AnalysisTypeAdapter, MeasurementTypeAdapter, DataView, DataViewSet, DataReference
7
+
8
+
9
+ class SavgolNumericalDerivative(AnalysisTypeAdapter):
10
+ """
11
+ Apply a numerical derivative to the measurement data.
12
+
13
+ Performs pair-wise differentiation of the measurement data.
14
+
15
+ Assumes that measurement data comes in (I, V, I, V, ...) format or equivalent.
16
+ Assumes that names are in the form of '[IV]_(?:b_)?_[0-9]'
17
+ """
18
+
19
+ _window_length: int
20
+ _polyorder: int
21
+ _derivative: int
22
+
23
+ def __init__(self, window_length: int = 15, polyorder: int = 3, derivative: int = 1):
24
+ super().__init__()
25
+ self._window_length = window_length
26
+ self._polyorder = polyorder
27
+ self._derivative = derivative
28
+
29
+ @override
30
+ def perform_analysis(self, data: tuple['MeasurementTypeAdapter.GeneratedData', ...]) -> tuple[
31
+ 'MeasurementTypeAdapter.GeneratedData', ...]:
32
+ parent_schema = tuple([element.descriptor for element in data])
33
+ output_schema = self.expected_structure(parent_schema)
34
+ out = []
35
+ for ((dxdy, dydx), (x, y)) in zip(itertools.batched(output_schema, 2), itertools.batched(data, 2)):
36
+ out.append(dxdy.with_data(
37
+ signal.savgol_filter(x.data, window_length=self._window_length, polyorder=self._polyorder, deriv=self._derivative)\
38
+ / signal.savgol_filter(y.data, window_length=self._window_length, polyorder=self._polyorder, deriv=self._derivative)
39
+ ))
40
+ out.append(dydx.with_data(
41
+ signal.savgol_filter(y.data, window_length=self._window_length, polyorder=self._polyorder, deriv=self._derivative)\
42
+ / signal.savgol_filter(x.data, window_length=self._window_length, polyorder=self._polyorder, deriv=self._derivative)
43
+ ))
44
+ return tuple(out)
45
+
46
+
47
+ @override
48
+ def expected_structure(self, parent_schema: tuple['MeasurementTypeAdapter.DataDescriptor', ...]) -> tuple['MeasurementTypeAdapter.DataDescriptor', ...]:
49
+ structure = []
50
+ for (x, y) in itertools.batched(parent_schema, 2):
51
+ assert x.axes == y.axes
52
+ structure += [
53
+ MeasurementTypeAdapter.DataDescriptor(
54
+ name=f"d{x.name}_d{y.name}",
55
+ unit=f"{x.unit}_{y.unit}",
56
+ axes=x.axes
57
+ ),
58
+ MeasurementTypeAdapter.DataDescriptor(
59
+ name=f"d{y.name}_d{x.name}",
60
+ unit=f"{y.unit}_{x.unit}",
61
+ axes=x.axes
62
+ )
63
+ ]
64
+ return tuple(structure)
65
+
66
+ @override
67
+ def default_views(self, parent_schema: tuple['MeasurementTypeAdapter.DataDescriptor', ...]) -> dict[str, DataView]:
68
+ schema = self.expected_structure(parent_schema)
69
+ variable_names = (schema[0].name.split('_')[0], schema[1].name.split('_')[0])
70
+ return {
71
+ f'd{variable_names[0]}_d{variable_names[1]}': DataView(
72
+ view_sets=[
73
+ DataViewSet(
74
+ x_path=DataReference(entry.axes[0].name,),
75
+ y_path=DataReference(entry.name, category='analysis')
76
+ ) for entry in schema[0::2]
77
+ ]
78
+ ),
79
+ f'd{variable_names[1]}_d{variable_names[0]}': DataView(
80
+ view_sets=[
81
+ DataViewSet(
82
+ x_path=DataReference(entry.axes[0].name),
83
+ y_path=DataReference(entry.name, category='analysis')
84
+ ) for entry in schema[1::2]
85
+ ]
86
+ )
87
+ }
@@ -16,10 +16,10 @@ UUID=rel_path\n
16
16
 
17
17
  The UUID is 6 symbols long. It is followed by an `=` symbol. The rest of the line is the relative path.
18
18
  """
19
-
19
+ import os
20
20
  from pathlib import Path
21
21
  import qkit
22
- import os
22
+ from os import PathLike
23
23
  import itertools
24
24
  from filelock import FileLock, Timeout
25
25
  import logging
@@ -68,7 +68,7 @@ class BreadCrumbCreator():
68
68
  log.error("Could not acquire lock file for clearing breadcrumbs.")
69
69
  raise
70
70
 
71
- def append_entry(self, uuid: str, path: Path|str):
71
+ def append_entry(self, uuid: str, path: PathLike):
72
72
  rel_path = Path(path).relative_to(self._breadcrumb_path.parent)
73
73
  try:
74
74
  with self._lock:
@@ -0,0 +1,48 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import Literal, Any
3
+
4
+ import numpy as np
5
+
6
+
7
+ class AbstractIVDevice(ABC):
8
+
9
+ @abstractmethod
10
+ def take_IV(self, sweep: np.ndarray) -> tuple[np.ndarray, np.ndarray]:
11
+ """
12
+ Perform an IV sweep. Returns (bias, sense).
13
+ """
14
+ pass
15
+
16
+ @abstractmethod
17
+ def get_sweep_mode(self) -> Literal[0, 1, 2]:
18
+ """
19
+ Get the sweep mode: 0 (VV-mode) | 1 (IV-mode) | 2 (VI-mode)
20
+ """
21
+ pass
22
+
23
+ @abstractmethod
24
+ def get_sweep_bias(self) -> Literal[0, 1]:
25
+ """
26
+ Get the sweep bias: 0 (current bias) | 1 (voltage bias)
27
+
28
+ Only relevant for units.
29
+ """
30
+ pass
31
+
32
+ @abstractmethod
33
+ def get_sweep_channels(self) -> list:
34
+ """
35
+ Get a list of channels to sweep.
36
+ """
37
+ pass
38
+
39
+ @abstractmethod
40
+ def set_status(self, status: bool, channel: Any):
41
+ """
42
+ Sets the status of a channel.
43
+ """
44
+ pass
45
+
46
+ def set_overall_status(self, status: bool):
47
+ for channel in self.get_sweep_channels():
48
+ self.set_status(status, channel)
@@ -0,0 +1,21 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import Any, Literal
3
+
4
+
5
+ class AbstractThermometer(ABC):
6
+ """
7
+ The interface for a generic multichannel thermometer.
8
+
9
+ It measures in [unit] (to be implemented). Returns measurement via get_temperature.
10
+ """
11
+
12
+ @property
13
+ def unit(self) -> Literal['K', '°C']:
14
+ """
15
+ The unit of the measurement. Override to change.
16
+ """
17
+ return 'K'
18
+
19
+ @abstractmethod
20
+ def get_temperature(self, channel: Any) -> float:
21
+ pass
@@ -36,7 +36,7 @@ class QviewkitURLParser(ParserContext):
36
36
  _kv = _argument_name << lit('=') & _argument_value
37
37
  _arguments = (lit('?') >> rep1sep(_kv, lit('&')) << eof > dict) | (eof > constant({}))
38
38
  _uuid = reg(r'[A-Z0-9]{6}') > str
39
- url_pattern = _prefix >> _uuid & _arguments
39
+ url_pattern = _prefix >> _uuid << opt(lit('/')) & _arguments
40
40
 
41
41
  @classmethod
42
42
  def parse(cls, data) -> Tuple[str, Optional[dict]]:
@@ -2,7 +2,7 @@ import logging
2
2
  from pathlib import Path
3
3
  import platform
4
4
  from types import ModuleType
5
- from typing import Callable, Literal
5
+ from typing import Callable, Literal, Optional
6
6
  import shutil
7
7
  import sys
8
8
 
@@ -55,7 +55,7 @@ def get_binary(name: str) -> str:
55
55
  return str(candidate)
56
56
 
57
57
 
58
- def copy_named_template(source_cache: Traversable, target_path: Path, target_name: str, human_readable: str | None = None):
58
+ def copy_named_template(source_cache: Traversable, target_path: Path, target_name: str, human_readable: Optional[str] = None):
59
59
  package_file: Traversable = source_cache / f'{target_name}-tpl'
60
60
  logging.debug("Got reference %s: %s", human_readable if human_readable is not None else target_name, package_file)
61
61
  target = (target_path / target_name)
@@ -68,7 +68,7 @@ def copy_named_template(source_cache: Traversable, target_path: Path, target_nam
68
68
  UNIVERSAL_SCRIPTS: list[Callable[[Path], None]] = []
69
69
  SYSTEM_SCRIPTS: dict[str, list[Callable[[Path], None]]] = {}
70
70
 
71
- def platform(target: Literal["Windows", "Linux", "Darwin", "All"]):
71
+ def on_platform(target: Literal["Windows", "Linux", "Darwin", "All"]):
72
72
  def decorator(f: Callable[[Path], None]):
73
73
  if target == "All":
74
74
  UNIVERSAL_SCRIPTS.append(f)
@@ -84,7 +84,7 @@ def platform(target: Literal["Windows", "Linux", "Darwin", "All"]):
84
84
  # Define Universal Scripts Here #
85
85
  #################################
86
86
 
87
- @platform("All")
87
+ @on_platform("All")
88
88
  def create_base_structure(pwd: Path):
89
89
  """
90
90
  Check if the PWD exists and create the folders 'notebooks', 'data' and 'logs'.
@@ -113,7 +113,7 @@ def create_base_structure(pwd: Path):
113
113
  # Define System Scripts Here #
114
114
  ##############################
115
115
 
116
- @platform("Windows")
116
+ @on_platform("Windows")
117
117
  def windows_install_scripts(pwd: Path):
118
118
  with open(pwd / "launch.bat", "w") as f:
119
119
  jupyter_path = get_binary('jupyter')
@@ -125,7 +125,7 @@ def windows_install_scripts(pwd: Path):
125
125
  logging.warning("No activate.bat found, assuming no venv exists. Calling jupyter directly.")
126
126
  f.write(f'"{jupyter_path}" lab --config=./jupyter_lab_config.py\r\n')
127
127
 
128
- @platform("Windows")
128
+ @on_platform("Windows")
129
129
  @windows_admin_required
130
130
  @optional("Install qviewkit url handler. Modifies the Registry.")
131
131
  def windows_install_qviewkit_url_handler(pwd: Path):
@@ -151,11 +151,11 @@ def windows_install_qviewkit_url_handler(pwd: Path):
151
151
  url_handler_key = winreg.CreateKeyEx(winreg.HKEY_CLASSES_ROOT, r"qviewkit")
152
152
  winreg.SetValueEx(url_handler_key, "URL Protocol", 0, winreg.REG_SZ, "")
153
153
  winreg.CloseKey(url_handler_key)
154
- command_key = winreg.OpenKey(winreg.HKEY_CLASSES_ROOT, r"qviewkit\shell\open\command")
154
+ command_key = winreg.CreateKeyEx(winreg.HKEY_CLASSES_ROOT, r"qviewkit\shell\open\command")
155
155
  winreg.SetValue(command_key, None, winreg.REG_SZ, qviewkit_url_launch_command)
156
156
  winreg.CloseKey(command_key)
157
157
 
158
- @platform("Windows")
158
+ @on_platform("Windows")
159
159
  @windows_admin_required
160
160
  @optional("Associate .h5 files with Qviewkit. Modifies the Registry.")
161
161
  def windows_associate_h5(pwd: Path):
@@ -194,14 +194,14 @@ def windows_associate_h5(pwd: Path):
194
194
  (value, type) = winreg.QueryValueEx(key, None)
195
195
  if value != r"qviewkit.h5":
196
196
  logging.info("Different association found. Overwriting...")
197
- winreg.SetValue(key, None, winreg.REG_SZ, r"qviewkit.h5")
197
+ winreg.SetValue(key, None, winreg.REG_SZ, r"qviewkit.h5") #TODO: This is buggy
198
198
  except FileNotFoundError:
199
199
  assoc_key = winreg.CreateKey(winreg.HKEY_CLASSES_ROOT, r".h5")
200
200
  winreg.SetValue(assoc_key, None, winreg.REG_SZ, "qviewkit.h5")
201
201
  winreg.CloseKey(assoc_key)
202
202
  logging.info("Association created.")
203
203
 
204
- @platform("Windows")
204
+ @on_platform("Windows")
205
205
  @windows_admin_required
206
206
  @optional("Disable Smart Sorting in Windows Explorer. Edits the registry.")
207
207
  def windows_disable_smart_sorting(pwd: Path):
@@ -209,13 +209,13 @@ def windows_disable_smart_sorting(pwd: Path):
209
209
  key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer")
210
210
  winreg.SetValue(key, "NoStrCmpLogical", winreg.REG_DWORD, 1)
211
211
 
212
- @platform("Windows")
212
+ @on_platform("Windows")
213
213
  def windows_set_config_path(pwd: Path):
214
214
  import os
215
215
  config_path = pwd / "qkit_local_config.py"
216
216
  os.system(f'setx QKIT_LOCAL_CONFIG "{str(config_path.absolute())}"')
217
217
 
218
- @platform("Linux")
218
+ @on_platform("Linux")
219
219
  def linux_set_env(pwd: Path):
220
220
  import os
221
221
  if 'QKIT_LOCAL_CONFIG' in os.environ or 'QKIT_VENV' in os.environ:
@@ -231,7 +231,7 @@ def linux_set_env(pwd: Path):
231
231
  with open(Path.home() / ".profile", mode="a") as f:
232
232
  f.write(var_export)
233
233
 
234
- @platform("Linux")
234
+ @on_platform("Linux")
235
235
  def linux_install_desktop_files(pwd: Path):
236
236
  def install_file(fname):
237
237
  import os
@@ -0,0 +1,83 @@
1
+ import logging
2
+
3
+ from laboneq.simple import *
4
+
5
+ from qkit.measure.unified_measurements import MeasurementTypeAdapter, Axis
6
+
7
+ from typing import Optional, List, Generator
8
+
9
+ import numpy as np
10
+
11
+
12
+ class LabOneQMeasurement(MeasurementTypeAdapter):
13
+ """
14
+ A measurement adapter for LabOneQ experiments.
15
+ Allows adapting all the LabOneQ measurements to Qkit storage and measurement infrastructure.
16
+ """
17
+
18
+ _session: Session
19
+ _experiment: Experiment
20
+ _structure: tuple['MeasurementTypeAdapter.DataDescriptor', ...]
21
+
22
+ @staticmethod
23
+ def sanitize_name(internal_name):
24
+ return internal_name.replace('/', '_').replace(' ', '_')
25
+
26
+ @staticmethod
27
+ def flatten(l: list) -> Generator:
28
+ """
29
+ Takes a list of lists and flattens it into a list. Must handle the case where the root list entries are not lists.
30
+ """
31
+ for element in l:
32
+ if isinstance(element, list):
33
+ yield from LabOneQMeasurement.flatten(element)
34
+ else:
35
+ yield element
36
+
37
+ def __init__(self, session: Session, experiment: Experiment, unit: str = 'a.u.', axis_units: Optional[List[str]] = None):
38
+ super().__init__()
39
+ self._session = session
40
+ self._experiment = experiment
41
+ compiled_experiment = self._session.compile(self._experiment)
42
+ emulated_session = Session(device_setup=compiled_experiment.device_setup, log_level=logging.WARNING)
43
+ emulated_session.connect(do_emulation=True)
44
+ emulated_result = emulated_session.run(compiled_experiment)
45
+ self._structure = tuple()
46
+ for (name, entry) in emulated_result.acquired_results.items():
47
+ sanitized = LabOneQMeasurement.sanitize_name(name)
48
+ axis_names = list(LabOneQMeasurement.flatten(entry.axis_name))
49
+ axes = tuple(LabOneQMeasurement.flatten(entry.axis))
50
+ if axis_units is None:
51
+ axis_units = ("a.u.",) * len(axis_names)
52
+ axes = tuple(Axis(name=name, range=values, unit=unit) for (name, values, unit) in zip(axis_names, axes, axis_units))
53
+ if np.iscomplexobj(entry.data):
54
+ self._structure += (
55
+ MeasurementTypeAdapter.DataDescriptor(name=sanitized + "_real", axes=axes, unit=unit),
56
+ MeasurementTypeAdapter.DataDescriptor(name=sanitized + "_imag", axes=axes, unit="i" + unit),
57
+ MeasurementTypeAdapter.DataDescriptor(name=sanitized + "_mag", axes=axes, unit=unit),
58
+ MeasurementTypeAdapter.DataDescriptor(name=sanitized + "_phase", axes=axes, unit='rad')
59
+ )
60
+ else:
61
+ self._structure += tuple(
62
+ MeasurementTypeAdapter.DataDescriptor(name=sanitized, axes=axes, unit=unit)
63
+ )
64
+
65
+ @property
66
+ def expected_structure(self) -> tuple['MeasurementTypeAdapter.DataDescriptor', ...]:
67
+ return self._structure
68
+
69
+ def perform_measurement(self) -> tuple['MeasurementTypeAdapter.GeneratedData', ...]:
70
+ compiled_experiment = self._session.compile(self._experiment)
71
+ result: Results = self._session.run(compiled_experiment)
72
+ def data_mapper(acquired_results):
73
+ for (name, entry) in acquired_results.items():
74
+ if np.iscomplexobj(entry.data):
75
+ yield name + "_real", np.real(entry.data)
76
+ yield name + "_imag", np.imag(entry.data)
77
+ yield name + "_mag", np.abs(entry.data)
78
+ yield name + "_phase", np.angle(entry.data)
79
+ else:
80
+ yield name, entry.data
81
+ return tuple(
82
+ descriptor.with_data(datum) for descriptor, (_, datum) in zip(self._structure, data_mapper(result.acquired_results))
83
+ )
@@ -0,0 +1,52 @@
1
+ import time
2
+
3
+ from qkit.measure.unified_measurements import MeasurementTypeAdapter, Axis
4
+ from qkit.drivers.AbstractVNA import AbstractVNA
5
+
6
+ class SpectroscopyMeasurement(MeasurementTypeAdapter):
7
+
8
+ _vna: AbstractVNA
9
+ _frequency_axis: Axis
10
+
11
+ def __init__(self, vna: AbstractVNA):
12
+ super().__init__()
13
+ self._vna = vna
14
+ self._frequency_axis = Axis(
15
+ name='frequency',
16
+ unit='Hz',
17
+ range=vna.get_freqpoints()
18
+ )
19
+
20
+ @staticmethod
21
+ def _phase_descriptor(frequency_axis: Axis):
22
+ return MeasurementTypeAdapter.DataDescriptor(
23
+ name="phase",
24
+ unit="rad",
25
+ axes=(frequency_axis,)
26
+ )
27
+
28
+ @staticmethod
29
+ def _amplitude_descriptor(frequency_axis: Axis):
30
+ return MeasurementTypeAdapter.DataDescriptor(
31
+ name="amplitude",
32
+ axes=(frequency_axis,)
33
+ )
34
+
35
+ @property
36
+ def expected_structure(self) -> tuple['MeasurementTypeAdapter.DataDescriptor', ...]:
37
+ return (
38
+ self._amplitude_descriptor(self._frequency_axis),
39
+ self._phase_descriptor(self._frequency_axis)
40
+ )
41
+
42
+ def perform_measurement(self) -> tuple['MeasurementTypeAdapter.GeneratedData', ...]:
43
+ self._vna.pre_measurement()
44
+ self._vna.start_measurement()
45
+ while not self._vna.ready():
46
+ time.sleep(0.1)
47
+ amp, phase = self._vna.get_tracedata()
48
+ self._vna.post_measurement()
49
+ return (
50
+ self._amplitude_descriptor(self._frequency_axis).with_data(amp),
51
+ self._phase_descriptor(self._frequency_axis).with_data(phase)
52
+ )
@@ -0,0 +1,34 @@
1
+ from typing import Any
2
+
3
+ from qkit.drivers.AbstractThermometer import AbstractThermometer
4
+ from qkit.measure.unified_measurements import MeasurementTypeAdapter
5
+
6
+
7
+ class ThermometryMeasurement(MeasurementTypeAdapter):
8
+
9
+ _thermometer: AbstractThermometer
10
+ _channel: Any
11
+ _descriptor: MeasurementTypeAdapter.DataDescriptor
12
+
13
+
14
+ def __init__(self, thermometer: AbstractThermometer, channel: Any, name: str = "temperature"):
15
+ super().__init__()
16
+ self._thermometer = thermometer
17
+ self._channel = channel
18
+ self._descriptor = MeasurementTypeAdapter.DataDescriptor(
19
+ name=name,
20
+ unit=self._thermometer.unit,
21
+ axes=tuple()
22
+ )
23
+
24
+
25
+ @property
26
+ def expected_structure(self) -> tuple['MeasurementTypeAdapter.DataDescriptor', ...]:
27
+ return (
28
+ self._descriptor,
29
+ )
30
+
31
+ def perform_measurement(self) -> tuple['MeasurementTypeAdapter.GeneratedData', ...]:
32
+ return (
33
+ self._descriptor.with_data(self._thermometer.get_temperature(self._channel)),
34
+ )