qkit 0.5.3__tar.gz → 0.5.4__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 → qkit-0.5.4}/PKG-INFO +1 -1
  2. qkit-0.5.4/src/qkit/_version.py +1 -0
  3. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/numerical_derivative.py +18 -6
  4. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/AbstractIVDevice.py +2 -1
  5. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/AbstractVNA.py +1 -1
  6. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/IVVI_BiasDAC.py +2 -2
  7. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/transport_measurement.py +44 -21
  8. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/unified_measurements.py +29 -21
  9. qkit-0.5.3/src/qkit/_version.py +0 -1
  10. {qkit-0.5.3 → qkit-0.5.4}/.git +0 -0
  11. {qkit-0.5.3 → qkit-0.5.4}/.gitattributes +0 -0
  12. {qkit-0.5.3 → qkit-0.5.4}/.github/workflows/release.yml +0 -0
  13. {qkit-0.5.3 → qkit-0.5.4}/.github/workflows/test.yml +0 -0
  14. {qkit-0.5.3 → qkit-0.5.4}/.gitignore +0 -0
  15. {qkit-0.5.3 → qkit-0.5.4}/.travis.yml +0 -0
  16. {qkit-0.5.3 → qkit-0.5.4}/AUTHORS +0 -0
  17. {qkit-0.5.3 → qkit-0.5.4}/CITATION.cff +0 -0
  18. {qkit-0.5.3 → qkit-0.5.4}/LICENSE +0 -0
  19. {qkit-0.5.3 → qkit-0.5.4}/README.md +0 -0
  20. {qkit-0.5.3 → qkit-0.5.4}/devices.toml.example +0 -0
  21. {qkit-0.5.3 → qkit-0.5.4}/doc/.gitignore +0 -0
  22. {qkit-0.5.3 → qkit-0.5.4}/doc/Makefile +0 -0
  23. {qkit-0.5.3 → qkit-0.5.4}/doc/make.bat +0 -0
  24. {qkit-0.5.3 → qkit-0.5.4}/doc/sample_data/1Q-NIST.json +0 -0
  25. {qkit-0.5.3 → qkit-0.5.4}/doc/sample_data/P8PPH2_anticrossing_sample_data.h5 +0 -0
  26. {qkit-0.5.3 → qkit-0.5.4}/doc/sample_data/QZQ3H8.sample +0 -0
  27. {qkit-0.5.3 → qkit-0.5.4}/doc/source/conf.py +0 -0
  28. {qkit-0.5.3 → qkit-0.5.4}/doc/source/index.rst +0 -0
  29. {qkit-0.5.3 → qkit-0.5.4}/doc/source/installation.rst +0 -0
  30. {qkit-0.5.3 → qkit-0.5.4}/doc/source/modules.rst +0 -0
  31. {qkit-0.5.3 → qkit-0.5.4}/doc/source/qkit.analysis.circle_fit.rst +0 -0
  32. {qkit-0.5.3 → qkit-0.5.4}/doc/source/qkit.analysis.rst +0 -0
  33. {qkit-0.5.3 → qkit-0.5.4}/doc/source/qkit.config.rst +0 -0
  34. {qkit-0.5.3 → qkit-0.5.4}/doc/source/qkit.core.lib.com.rst +0 -0
  35. {qkit-0.5.3 → qkit-0.5.4}/doc/source/qkit.core.lib.devices.rst +0 -0
  36. {qkit-0.5.3 → qkit-0.5.4}/doc/source/qkit.core.lib.file_service.rst +0 -0
  37. {qkit-0.5.3 → qkit-0.5.4}/doc/source/qkit.core.lib.network.rst +0 -0
  38. {qkit-0.5.3 → qkit-0.5.4}/doc/source/qkit.core.lib.rst +0 -0
  39. {qkit-0.5.3 → qkit-0.5.4}/doc/source/qkit.core.rst +0 -0
  40. {qkit-0.5.3 → qkit-0.5.4}/doc/source/qkit.core.s_init.bkup.rst +0 -0
  41. {qkit-0.5.3 → qkit-0.5.4}/doc/source/qkit.core.s_init.rst +0 -0
  42. {qkit-0.5.3 → qkit-0.5.4}/doc/source/qkit.gui.notebook.rst +0 -0
  43. {qkit-0.5.3 → qkit-0.5.4}/doc/source/qkit.gui.plot.rst +0 -0
  44. {qkit-0.5.3 → qkit-0.5.4}/doc/source/qkit.gui.qviewkit.rst +0 -0
  45. {qkit-0.5.3 → qkit-0.5.4}/doc/source/qkit.gui.rst +0 -0
  46. {qkit-0.5.3 → qkit-0.5.4}/doc/source/qkit.instruments.rst +0 -0
  47. {qkit-0.5.3 → qkit-0.5.4}/doc/source/qkit.logs.rst +0 -0
  48. {qkit-0.5.3 → qkit-0.5.4}/doc/source/qkit.measure.rst +0 -0
  49. {qkit-0.5.3 → qkit-0.5.4}/doc/source/qkit.measure.spectroscopy.rst +0 -0
  50. {qkit-0.5.3 → qkit-0.5.4}/doc/source/qkit.measure.timedomain.awg.rst +0 -0
  51. {qkit-0.5.3 → qkit-0.5.4}/doc/source/qkit.measure.timedomain.rst +0 -0
  52. {qkit-0.5.3 → qkit-0.5.4}/doc/source/qkit.measure.transport.rst +0 -0
  53. {qkit-0.5.3 → qkit-0.5.4}/doc/source/qkit.rst +0 -0
  54. {qkit-0.5.3 → qkit-0.5.4}/doc/source/qkit.services.qplexkit.rst +0 -0
  55. {qkit-0.5.3 → qkit-0.5.4}/doc/source/qkit.services.qsurveilkit.rst +0 -0
  56. {qkit-0.5.3 → qkit-0.5.4}/doc/source/qkit.services.raspi_misc.rst +0 -0
  57. {qkit-0.5.3 → qkit-0.5.4}/doc/source/qkit.services.rst +0 -0
  58. {qkit-0.5.3 → qkit-0.5.4}/doc/source/qkit.storage.rst +0 -0
  59. {qkit-0.5.3 → qkit-0.5.4}/images/Qkit_Logo.png +0 -0
  60. {qkit-0.5.3 → qkit-0.5.4}/images/Qkit_Logo.svg +0 -0
  61. {qkit-0.5.3 → qkit-0.5.4}/images/Qkit_QRcode.png +0 -0
  62. {qkit-0.5.3 → qkit-0.5.4}/images/Qkit_QRcode.svg +0 -0
  63. {qkit-0.5.3 → qkit-0.5.4}/pyproject.toml +0 -0
  64. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/__init__.py +0 -0
  65. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/CurveXtractor.py +0 -0
  66. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/IV_curve.py +0 -0
  67. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/IV_curve2.py +0 -0
  68. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/IV_curve3.py +0 -0
  69. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/Manual point picker.ipynb_template +0 -0
  70. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/__init__.py +0 -0
  71. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/avoided_crossing_fit.py +0 -0
  72. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/circle_fit/__init__.py +0 -0
  73. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/circle_fit/another_circle_fit.py +0 -0
  74. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/circle_fit/circle_fit_2019/__init__.py +0 -0
  75. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/circle_fit/circle_fit_2019/circuit.py +0 -0
  76. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/circle_fit/circle_fit_classic/__init__.py +0 -0
  77. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/circle_fit/circle_fit_classic/calibration.py +0 -0
  78. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/circle_fit/circle_fit_classic/circlefit.py +0 -0
  79. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/circle_fit/circle_fit_classic/circuit.py +0 -0
  80. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/circle_fit/circle_fit_classic/utilities.py +0 -0
  81. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/iq_cloud_analysis.ipynb_template +0 -0
  82. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/iq_cloud_analysis.py +0 -0
  83. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/manual_point_picker.py +0 -0
  84. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/pointtracker.py +0 -0
  85. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/qdata.py +0 -0
  86. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/qfit.py +0 -0
  87. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/qps_rings.py +0 -0
  88. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/resonator.py +0 -0
  89. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/sonnet_parser.py +0 -0
  90. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/spectroscopy.py +0 -0
  91. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/timedomain.py +0 -0
  92. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/analysis/uncertainties_utilities.py +0 -0
  93. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/config/.gitignore +0 -0
  94. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/config/README.md +0 -0
  95. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/config/__init__.py +0 -0
  96. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/config/config_holder.py +0 -0
  97. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/config/environment.py +0 -0
  98. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/config/local.py_template +0 -0
  99. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/config/services.py_template +0 -0
  100. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/.gitignore +0 -0
  101. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/README +0 -0
  102. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/VERSION +0 -0
  103. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/__init__.py +0 -0
  104. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/flow.py +0 -0
  105. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/instrument_base.py +0 -0
  106. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/instrument_basev2.py +0 -0
  107. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/instrument_tools.py +0 -0
  108. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/lib/__init__.py +0 -0
  109. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/lib/com/__init__.py +0 -0
  110. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/lib/com/info_client.py +0 -0
  111. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/lib/com/info_service.py +0 -0
  112. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/lib/com/ri_client.py +0 -0
  113. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/lib/com/ri_service.py +0 -0
  114. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/lib/com/signals.py +0 -0
  115. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/lib/file_service/__init__.py +0 -0
  116. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/lib/file_service/breadcrumbs.py +0 -0
  117. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/lib/file_service/file_info_database.py +0 -0
  118. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/lib/file_service/file_info_database_lib.py +0 -0
  119. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/lib/list_dict_DB.py +0 -0
  120. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/lib/misc.py +0 -0
  121. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/lib/network/__init__.py +0 -0
  122. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/lib/network/tcpclient.py +0 -0
  123. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/lib/temp.py +0 -0
  124. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/s_init/S10_logging.py +0 -0
  125. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/s_init/S14_setup_directories.py +0 -0
  126. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/s_init/S16_available_modules.py +0 -0
  127. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/s_init/S20_check_for_updates.py +0 -0
  128. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/s_init/S25_info_service.py +0 -0
  129. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/s_init/S30_qkit_start.py +0 -0
  130. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/s_init/S65_load_RI_service.py +0 -0
  131. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/s_init/S70_load_visa.py +0 -0
  132. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/s_init/S80_load_file_service.py +0 -0
  133. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/s_init/S85_init_measurement.py +0 -0
  134. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/s_init/S98_started.py +0 -0
  135. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/s_init/S99_init_user.py +0 -0
  136. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/s_init/_30_network_server.py +0 -0
  137. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/s_init/_80_create_instruments.py +0 -0
  138. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/s_init/__init__.py +0 -0
  139. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/core/startup.py +0 -0
  140. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/ADwinProII_SMU.py +0 -0
  141. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/AbstractMicrowaveSource.py +0 -0
  142. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/AbstractThermometer.py +0 -0
  143. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Agilent_DSO.py +0 -0
  144. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Agilent_E8257D.py +0 -0
  145. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Agilent_PNAX.py +0 -0
  146. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Agilent_TwissTorr74.py +0 -0
  147. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Agilent_VNA_E5071C.py +0 -0
  148. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/AnaPico_APUASYN20.py +0 -0
  149. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Anritsu_MG37022.py +0 -0
  150. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Anritsu_MS2830A.py +0 -0
  151. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Anritsu_VNA.py +0 -0
  152. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Anritsu_VNA_MS4642B.py +0 -0
  153. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/BKPrecision_9242.py +0 -0
  154. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Bluefors_GHS.py +0 -0
  155. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Caen_FAST_PS.py +0 -0
  156. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/DC_DAC_LTC2666.py +0 -0
  157. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/DummyVNA.py +0 -0
  158. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/EA_PS9360.py +0 -0
  159. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/ERASynth.py +0 -0
  160. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/EdwardsActiveDigitalController.py +0 -0
  161. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/EthernetNode.py +0 -0
  162. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/EthernetServer.py +0 -0
  163. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/EthernetServerWin.py +0 -0
  164. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/FTDI_DAQ.py +0 -0
  165. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Faulhaber_3564K024B_C.py +0 -0
  166. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/GHzDAC.py +0 -0
  167. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/HP_34401A.py +0 -0
  168. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/HP_81110A.py +0 -0
  169. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/IQ_Mixer.py +0 -0
  170. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/IVD_dummy.py +0 -0
  171. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Inficon.py +0 -0
  172. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Keithley.py +0 -0
  173. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Keithley_2000.py +0 -0
  174. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Keithley_2450.py +0 -0
  175. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Keithley_2636A.py +0 -0
  176. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Keysight_35670A.py +0 -0
  177. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Keysight_B2900.py +0 -0
  178. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Keysight_E8267D.py +0 -0
  179. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Keysight_N5173B.py +0 -0
  180. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Keysight_VNA_E5071C.py +0 -0
  181. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Keysight_VNA_E5080B.py +0 -0
  182. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Keysight_VNA_E5080B_spectrum.py +0 -0
  183. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Keysight_VNA_P9375A.py +0 -0
  184. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Lmx2595.py +0 -0
  185. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/MKS_647C.py +0 -0
  186. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/MicroMag3.py +0 -0
  187. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/ModernDriverTest.py +0 -0
  188. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/NI_DAQ.py +0 -0
  189. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/NI_DAQ_IV.py +0 -0
  190. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/OxfordInstruments_Kelvinox_IGH.py +0 -0
  191. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Oxford_ITC503.py +0 -0
  192. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Oxford_Triton.py +0 -0
  193. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/RFPCB.py +0 -0
  194. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/RFPCBJ.py +0 -0
  195. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/RFPCB_V2.py +0 -0
  196. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/RS_FSUP.py +0 -0
  197. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/RS_SGMA.py +0 -0
  198. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/RS_VNA_ZNAXX.py +0 -0
  199. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/RT_MW_Switch.py +0 -0
  200. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/SR_830.py +0 -0
  201. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/SerialPortCommunication.py +0 -0
  202. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Spectrum_M2i2030.py +0 -0
  203. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Spectrum_M3i2132.py +0 -0
  204. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Spectrum_M4i2211.py +0 -0
  205. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/StepAttenuator.py +0 -0
  206. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/StepMotor.py +0 -0
  207. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Tabor_WX1284C.py +0 -0
  208. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Tektronix_AWG5014.py +0 -0
  209. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Tektronix_AWG520.py +0 -0
  210. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Tektronix_AWG7062.py +0 -0
  211. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Tektronix_PWS4205.py +0 -0
  212. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Teslameter_FM302.py +0 -0
  213. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Tunnel_DAC.py +0 -0
  214. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/VCAs_TD.py +0 -0
  215. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/VNA_dummy.py +0 -0
  216. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Virtual_Coil.py +0 -0
  217. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Virtual_Current_Source.py +0 -0
  218. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Virtual_VCA.py +0 -0
  219. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Windfreak_calibration_files/Readme.txt +0 -0
  220. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_288_ChannelA.cal +0 -0
  221. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_288_ChannelB.cal +0 -0
  222. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_289_ChannelA.cal +0 -0
  223. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_289_ChannelB.cal +0 -0
  224. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelA.cal +0 -0
  225. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelA_calibration_with_freq_and_pow +0 -0
  226. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelA_calibration_with_freq_and_pow.npy +0 -0
  227. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelA_calibration_with_freq_and_pow_calibration_matrix_dBm.txt +0 -0
  228. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelA_calibration_with_freq_and_pow_frequency_Hz.txt +0 -0
  229. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelA_calibration_with_freq_and_pow_power_intrinsic_units.txt +0 -0
  230. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelB.cal +0 -0
  231. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelB_calibration_with_freq_and_pow +0 -0
  232. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelB_calibration_with_freq_and_pow.npy +0 -0
  233. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelB_calibration_with_freq_and_pow_calibration_matrix_dBm.txt +0 -0
  234. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelB_calibration_with_freq_and_pow_frequency_Hz.txt +0 -0
  235. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Windfreak_calibration_files/Windfreak_290_ChannelB_calibration_with_freq_and_pow_power_intrinsic_units.txt +0 -0
  236. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Windfreak_calibration_files/convert_files_to_python_3.ipynb +0 -0
  237. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Windfreak_calibration_files/test_open_file_python3.ipynb +0 -0
  238. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Windfreaktech916.py +0 -0
  239. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Windfreaktech_SynthHD.cal +0 -0
  240. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Windfreaktech_SynthHD.py +0 -0
  241. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Yokogawa.py +0 -0
  242. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Yokogawa_GS200.py +0 -0
  243. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Yokogawa_GS210.py +0 -0
  244. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/Yokogawa_GS820.py +0 -0
  245. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/ZHInstSHFQC.py +0 -0
  246. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/ZHInst_Abstract.py +0 -0
  247. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/ZHInst_Abstractv2.py +0 -0
  248. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/ZHInst_PQSC.py +0 -0
  249. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/ZHInst_SHFSG.py +0 -0
  250. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/ZHInst_SHFSGv2.py +0 -0
  251. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/ZHInst_UHFQA.py +0 -0
  252. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/ZHInst_UHFQAv2.py +0 -0
  253. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/ZHInst_Virtual_VNA.py +0 -0
  254. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/ZHInst_Virtual_VNAv2.py +0 -0
  255. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/ZHInst_Waveforms/CPMG.json +0 -0
  256. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/ZHInst_Waveforms/CPMG.seq +0 -0
  257. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/ZHInst_Waveforms/rabi.json +0 -0
  258. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/ZHInst_Waveforms/rabi.seq +0 -0
  259. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/ZHInst_Waveforms/ramsey.json +0 -0
  260. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/ZHInst_Waveforms/ramsey.seq +0 -0
  261. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/_Spectrum_M3i2132/__init__.py +0 -0
  262. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/_Spectrum_M3i2132/errors.py +0 -0
  263. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/_Spectrum_M3i2132/regs.py +0 -0
  264. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/_Spectrum_M4i2211/__init__.py +0 -0
  265. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/_Spectrum_M4i2211/errors.py +0 -0
  266. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/_Spectrum_M4i2211/h2py.py +0 -0
  267. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/_Spectrum_M4i2211/regs.py +0 -0
  268. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/__init__.py +0 -0
  269. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/agilent_33210A.py +0 -0
  270. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/dll_support_nidaq.py +0 -0
  271. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/manual_settings.py +0 -0
  272. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/mfc_dummy.py +0 -0
  273. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/nidaq_syncIV.py +0 -0
  274. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/ohmmeter_dummy.py +0 -0
  275. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/qdevil_qdacII.py +0 -0
  276. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/qplexkit_client.py +0 -0
  277. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/quartz_dummy.py +0 -0
  278. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/switch_client.py +0 -0
  279. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/te_opto_dac.py +0 -0
  280. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/tip2_client.py +0 -0
  281. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/tip_client.py +0 -0
  282. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/two_port_switch.py +0 -0
  283. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/virtual_MultiplexingReadout.py +0 -0
  284. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/virtual_VNA_quantum_machines.py +0 -0
  285. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/virtual_magnet.py +0 -0
  286. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/virtual_measure_spec.py +0 -0
  287. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/virtual_pwsMagnet.py +0 -0
  288. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/virtual_step_attenuator.py +0 -0
  289. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/virtual_temperature_UFO.py +0 -0
  290. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/virtual_tunnel_electronic.py +0 -0
  291. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/virtual_yokomagnet.py +0 -0
  292. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/drivers/visa_prologix.py +0 -0
  293. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/gui/__init__.py +0 -0
  294. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/gui/notebook/Progress_Bar.py +0 -0
  295. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/gui/notebook/Stopwatch.py +0 -0
  296. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/gui/notebook/__init__.py +0 -0
  297. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/gui/notebook/quickplot.py +0 -0
  298. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/gui/notebook/wf_plot.py +0 -0
  299. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/gui/plot/__init__.py +0 -0
  300. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/gui/plot/plot.py +0 -0
  301. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/gui/plot/url_launcher.py +0 -0
  302. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/gui/qviewkit/DatasetsWindow.py +0 -0
  303. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/gui/qviewkit/PlotWindow.py +0 -0
  304. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/gui/qviewkit/PlotWindow_lib.py +0 -0
  305. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/gui/qviewkit/__init__.py +0 -0
  306. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/gui/qviewkit/info_subsys.py +0 -0
  307. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/gui/qviewkit/main.py +0 -0
  308. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/gui/qviewkit/main_view.py +0 -0
  309. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/gui/qviewkit/pg_time_axis.py +0 -0
  310. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/gui/qviewkit/plot_view.py +0 -0
  311. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/gui/qviewkit/qviewkit.bat +0 -0
  312. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/install/install.py +0 -0
  313. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/install/jupyter_lab_config.py-tpl +0 -0
  314. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/install/linux/qkit-jupyter-lab.desktop +0 -0
  315. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/install/linux/qkit-qviewkit-url.desktop +0 -0
  316. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/install/linux/qkit-qviewkit.desktop +0 -0
  317. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/install/qkit_local_config.py-tpl +0 -0
  318. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/__init__.py +0 -0
  319. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/json_handler.py +0 -0
  320. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/laboneq_measurement.py +0 -0
  321. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/measurement_base.py +0 -0
  322. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/measurement_class.py +0 -0
  323. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/samples_class.py +0 -0
  324. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/spectroscopy/README.md +0 -0
  325. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/spectroscopy/__init__.py +0 -0
  326. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/spectroscopy/signal_spectroscopy.py +0 -0
  327. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/spectroscopy/spectroscopy.py +0 -0
  328. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/spectroscopy/spectroscopy_measurement.py +0 -0
  329. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/spectroscopy/spectroscopy_unified.py +0 -0
  330. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/thermometry_measurement.py +0 -0
  331. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/timedomain/002_TD1_f01_rabi_t1_ramsey.ipynb +0 -0
  332. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/timedomain/VirtualAWG.py +0 -0
  333. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/timedomain/__init__.py +0 -0
  334. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/timedomain/awg/__init__.py +0 -0
  335. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/timedomain/awg/generate_waveform.py +0 -0
  336. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/timedomain/awg/load_awg.py +0 -0
  337. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/timedomain/awg/load_tawg.py +0 -0
  338. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/timedomain/awg/tomography.py +0 -0
  339. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/timedomain/gate_func.py +0 -0
  340. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/timedomain/initialize.py +0 -0
  341. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/timedomain/measure_ZI_td.py +0 -0
  342. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/timedomain/measure_td.py +0 -0
  343. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/timedomain/pulse_sequence.py +0 -0
  344. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/timedomain/quantum_machine/__init__.py +0 -0
  345. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/timedomain/quantum_machine/basic_qubit_experiments.py +0 -0
  346. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/timedomain/quantum_machine/basic_qubit_experiments_V2.py +0 -0
  347. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/timedomain/quantum_machine/pulses.py +0 -0
  348. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/timedomain/quantum_machine/qm_qkit_wrapper.py +0 -0
  349. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/timedomain/quantum_machine/qm_qubit_config.py +0 -0
  350. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/timedomain/quantum_machine/qm_qubit_config_V2.py +0 -0
  351. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/timedomain/quantum_machine/quantum_jump_monitoring.py +0 -0
  352. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/timedomain/quantum_machine/qubit_high_temp.py +0 -0
  353. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/timedomain/quantum_machine/script.py +0 -0
  354. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/timedomain/quantum_machine/script_pyqt.py +0 -0
  355. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/timedomain/sequence_library.py +0 -0
  356. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/transport/__init__.py +0 -0
  357. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/transport/transport.py +0 -0
  358. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/measure/write_additional_files.py +0 -0
  359. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/__init__.py +0 -0
  360. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/qdepokit/Deposition_template.ipynb +0 -0
  361. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/qdepokit/__init__.py +0 -0
  362. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/qdepokit/sdi.py +0 -0
  363. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/qplexkit/.gitignore +0 -0
  364. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/qplexkit/__init__.py +0 -0
  365. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/qplexkit/ccr.json_template +0 -0
  366. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/qplexkit/install_systemd_service.sh +0 -0
  367. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/qplexkit/pcf8575.py +0 -0
  368. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/qplexkit/qplexkit.py +0 -0
  369. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/qplexkit/server.py +0 -0
  370. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/qplexkit/test_PCF8575.py +0 -0
  371. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/qsurveilkit/README.md +0 -0
  372. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/qsurveilkit/__init__.py +0 -0
  373. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/qsurveilkit/client_main.py +0 -0
  374. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/qsurveilkit/data_class.py +0 -0
  375. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/qsurveilkit/plasma1_gui.py +0 -0
  376. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/qsurveilkit/plasma1_gui.ui +0 -0
  377. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/qsurveilkit/server_main.py_template +0 -0
  378. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/qsurveilkit/settings.cfg_template +0 -0
  379. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/qsurveilkit/srv_thread.py +0 -0
  380. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/qsurveilkit/worker.py +0 -0
  381. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/raspi_misc/OxfordInstruments_Kelvinox_IGH_serial.py +0 -0
  382. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/raspi_misc/RT_switch/__init__.py +0 -0
  383. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/raspi_misc/RT_switch/switchbox_server.py +0 -0
  384. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/raspi_misc/RT_switch/two_port_switch_manual_client.py +0 -0
  385. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/raspi_misc/__init__.py +0 -0
  386. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/raspi_misc/dc_dac/DAC_LTC2666_communication.py +0 -0
  387. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/raspi_misc/dc_dac/__init__.py +0 -0
  388. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/raspi_misc/dc_dac/server.py +0 -0
  389. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/raspi_misc/edwards/EdwardsActiveDigitalController.py +0 -0
  390. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/raspi_misc/edwards/EdwardsBridgeReadout.py +0 -0
  391. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/raspi_misc/edwards/__init__.py +0 -0
  392. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/raspi_misc/edwards/edw_client.py +0 -0
  393. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/raspi_misc/edwards/edw_server.py +0 -0
  394. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/raspi_misc/erasynth_server.py +0 -0
  395. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/raspi_misc/nitrogen/__init__.py +0 -0
  396. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/raspi_misc/nitrogen/nitrogen_controller.py +0 -0
  397. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/raspi_misc/nitrogen/nitrogen_server.py +0 -0
  398. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/raspi_misc/nitrogen/refill_manual.py +0 -0
  399. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/raspi_misc/nitrogen/refilling_switch_off.py +0 -0
  400. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/raspi_misc/nitrogen/refilling_switch_on.py +0 -0
  401. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/raspi_misc/nitrogen/sendMail.py +0 -0
  402. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/raspi_misc/step_attenuator_server.py +0 -0
  403. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/raspi_misc/step_motor.py +0 -0
  404. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/raspi_misc/tip/__init__.py +0 -0
  405. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/raspi_misc/tip/fridge_monitoring.py +0 -0
  406. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/switchbox/lib_oled96.py +0 -0
  407. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/switchbox/server.py +0 -0
  408. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/services/switchbox/switch.py +0 -0
  409. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/storage/README.md +0 -0
  410. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/storage/__init__.py +0 -0
  411. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/storage/hdf_DateTimeGenerator.py +0 -0
  412. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/storage/hdf_constants.py +0 -0
  413. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/storage/hdf_dataset.py +0 -0
  414. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/storage/hdf_file.py +0 -0
  415. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/storage/hdf_lib.py +0 -0
  416. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/storage/hdf_view.py +0 -0
  417. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/storage/store.py +0 -0
  418. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/templates/Analysis/Probestation.ipynb +0 -0
  419. {qkit-0.5.3 → qkit-0.5.4}/src/qkit/templates/Measurements/Probestation.ipynb +0 -0
  420. {qkit-0.5.3 → qkit-0.5.4}/tests/__init__.py +0 -0
  421. {qkit-0.5.3 → qkit-0.5.4}/tests/analysis/test_new_circlefit.py +0 -0
  422. {qkit-0.5.3 → qkit-0.5.4}/tests/breadcrumb/.1337deadbeef.breadcrumb +0 -0
  423. {qkit-0.5.3 → qkit-0.5.4}/tests/breadcrumb/.7c57581a89db.breadcrumb.lock +0 -0
  424. {qkit-0.5.3 → qkit-0.5.4}/tests/breadcrumb/.deadbeef1337.breadcrumb +0 -0
  425. {qkit-0.5.3 → qkit-0.5.4}/tests/breadcrumb/.gitignore +0 -0
  426. {qkit-0.5.3 → qkit-0.5.4}/tests/breadcrumb/STUVWX_dummy.h5 +0 -0
  427. {qkit-0.5.3 → qkit-0.5.4}/tests/breadcrumb/test_breadcrumbs.py +0 -0
  428. {qkit-0.5.3 → qkit-0.5.4}/tests/core/.7c57581a89db.breadcrumb +0 -0
  429. {qkit-0.5.3 → qkit-0.5.4}/tests/core/.7c57581a89db.breadcrumb.lock +0 -0
  430. {qkit-0.5.3 → qkit-0.5.4}/tests/core/.gitignore +0 -0
  431. {qkit-0.5.3 → qkit-0.5.4}/tests/core/STUVWX_dummy.h5 +0 -0
  432. {qkit-0.5.3 → qkit-0.5.4}/tests/core/subdir/YZ0123_dummy.h5 +0 -0
  433. {qkit-0.5.3 → qkit-0.5.4}/tests/core/test_file_info_database.py +0 -0
  434. {qkit-0.5.3 → qkit-0.5.4}/tests/measure/.gitignore +0 -0
  435. {qkit-0.5.3 → qkit-0.5.4}/tests/measure/test.h5 +0 -0
  436. {qkit-0.5.3 → qkit-0.5.4}/tests/measure/test_unified_syntax.py +0 -0
  437. {qkit-0.5.3 → qkit-0.5.4}/tests/storage/.gitignore +0 -0
  438. {qkit-0.5.3 → qkit-0.5.4}/tests/storage/large_file.h5 +0 -0
  439. {qkit-0.5.3 → qkit-0.5.4}/tests/storage/test_hdf5.py +0 -0
  440. {qkit-0.5.3 → qkit-0.5.4}/tests/test_qkit_basics.py +0 -0
  441. {qkit-0.5.3 → qkit-0.5.4}/tests/url/test_url_handler.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: qkit
3
- Version: 0.5.3
3
+ Version: 0.5.4
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
@@ -0,0 +1 @@
1
+ __version__ = "0.5.4"
@@ -53,12 +53,14 @@ class SavgolNumericalDerivative(AnalysisTypeAdapter):
53
53
  MeasurementTypeAdapter.DataDescriptor(
54
54
  name=f"d{x.name}_d{y.name}",
55
55
  unit=f"{x.unit}_{y.unit}",
56
- axes=x.axes
56
+ axes=x.axes,
57
+ category="analysis"
57
58
  ),
58
59
  MeasurementTypeAdapter.DataDescriptor(
59
60
  name=f"d{y.name}_d{x.name}",
60
61
  unit=f"{y.unit}_{x.unit}",
61
- axes=x.axes
62
+ axes=x.axes,
63
+ category="analysis"
62
64
  )
63
65
  ]
64
66
  return tuple(structure)
@@ -67,16 +69,26 @@ class SavgolNumericalDerivative(AnalysisTypeAdapter):
67
69
  def default_views(self, parent_schema: tuple['MeasurementTypeAdapter.DataDescriptor', ...]) -> dict[str, DataView]:
68
70
  schema = self.expected_structure(parent_schema)
69
71
  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
+ return { # dx/dy
73
+ f'{variable_names[0]}_{variable_names[1]}': DataView(
74
+ view_params={
75
+ "labels": (schema[0].axes[0].name, f'{variable_names[0]}_{variable_names[1]}'),
76
+ 'plot_style': 1,
77
+ 'markersize': 5
78
+ },
72
79
  view_sets=[
73
80
  DataViewSet(
74
81
  x_path=DataReference(entry.axes[0].name,),
75
82
  y_path=DataReference(entry.name, category='analysis')
76
83
  ) for entry in schema[0::2]
77
84
  ]
78
- ),
79
- f'd{variable_names[1]}_d{variable_names[0]}': DataView(
85
+ ), # dy/dx
86
+ f'{variable_names[1]}_{variable_names[0]}': DataView(
87
+ view_params={
88
+ "labels": (schema[1].axes[0].name, f'{variable_names[1]}_{variable_names[0]}'),
89
+ 'plot_style': 1,
90
+ 'markersize': 5
91
+ },
80
92
  view_sets=[
81
93
  DataViewSet(
82
94
  x_path=DataReference(entry.axes[0].name),
@@ -7,9 +7,10 @@ import numpy as np
7
7
  class AbstractIVDevice(ABC):
8
8
 
9
9
  @abstractmethod
10
- def take_IV(self, sweep: np.ndarray) -> tuple[np.ndarray, np.ndarray]:
10
+ def take_IV(self, sweep: tuple[float, float, float, float]) -> tuple[np.ndarray, np.ndarray]:
11
11
  """
12
12
  Perform an IV sweep. Returns (bias, sense).
13
+ Sweep is (start, stop, step, sleep)
13
14
  """
14
15
  pass
15
16
 
@@ -36,7 +36,7 @@ class AbstractVNA(ABC):
36
36
  return freqs[-1] - freqs[0]
37
37
 
38
38
  @abstractmethod
39
- def get_tracedata(self, RealImag = None) -> tuple((np.ndarray, np.ndarray)):
39
+ def get_tracedata(self, RealImag = None) -> tuple[np.ndarray, np.ndarray]:
40
40
  """
41
41
  When the measurement succeeded, this method returns the resulting data.
42
42
  The behaviour depends on the [RealImag] keyword argument.
@@ -108,8 +108,8 @@ class IVVI_BiasDAC(Instrument):
108
108
  self.v_div = None # for voltage bias
109
109
  def get_sweep_mode(self):
110
110
  # 0: V bias V measure, 1: I bias V measure, 2: V bias I measure
111
- # technically mode 2 also possible, this class cant determine 0 vs 2 without hidden knowledge about measure function though
112
- return 1 - self.pseudo_bias_mode
111
+ # technically mode 0 also possible, this class cant determine 0 vs 2 without hidden knowledge about measure function though
112
+ return 1 + self.pseudo_bias_mode
113
113
  def get_sweep_bias(self):
114
114
  return self.pseudo_bias_mode
115
115
  def get_sweep_channels(self):
@@ -8,8 +8,7 @@ import numpy as np
8
8
  import itertools
9
9
 
10
10
  from qkit.drivers.AbstractIVDevice import AbstractIVDevice
11
- from qkit.measure.unified_measurements import MeasurementTypeAdapter, Axis
12
- from qkit.storage.thin_hdf import HDF5
11
+ from qkit.measure.unified_measurements import MeasurementTypeAdapter, Axis, DataView, DataViewSet, DataReference
13
12
 
14
13
 
15
14
  @dataclass(frozen=True)
@@ -20,36 +19,44 @@ class _MeasureMode:
20
19
  measure_unit: str
21
20
 
22
21
  class MeasureModes(Enum):
22
+ """
23
+ TODO DocString BiasSense (?)
24
+ """
23
25
  IV = _MeasureMode('i', 'A', 'v', 'V')
24
26
  VI = _MeasureMode('v', 'V', 'i', 'A')
25
27
 
26
28
  class TransportMeasurement(MeasurementTypeAdapter):
27
29
 
28
30
  _measurement_descriptors: list[tuple[MeasurementTypeAdapter.DataDescriptor, MeasurementTypeAdapter.DataDescriptor]]
31
+ _sweep_parameters: list[tuple[float, float, float]]
29
32
  _iv_device: AbstractIVDevice
30
33
  _mode: MeasureModes
31
34
  _sleep: float
35
+ _extend_range: bool
32
36
 
33
- def __init__(self, iv_device: AbstractIVDevice, mode: MeasureModes = MeasureModes.IV, sleep: float = 0):
37
+ def __init__(self, iv_device: AbstractIVDevice, mode: MeasureModes = MeasureModes.IV, sleep: float = 0, extend_range=False):
34
38
  super().__init__()
35
39
  self._iv_device = iv_device
36
40
  self._mode = mode
37
41
  self._measurement_descriptors = []
42
+ self._sweep_parameters = []
38
43
  self._sleep = sleep
44
+ self._extend_range = extend_range
39
45
  if mode == MeasureModes.IV:
40
- assert iv_device.get_sweep_mode() == 1
46
+ assert iv_device.get_sweep_bias() == 0
41
47
  elif mode == MeasureModes.VI:
42
- assert iv_device.get_sweep_mode() == 2
48
+ assert iv_device.get_sweep_bias() == 1
43
49
 
44
50
  def add_sweep(self, start: float, stop: float, step: float):
45
51
  axis = Axis(
46
- name=f'{self._mode.value.bias_symbol}_{len(self._measurement_descriptors)}',
52
+ name=f'{self._mode.value.bias_symbol}_b_{len(self._measurement_descriptors)}',
47
53
  unit=self._mode.value.bias_unit,
48
- range=np.arange(start, stop, step)
54
+ range=np.arange(start, stop if not self._extend_range else (stop + step/2), step)
49
55
  )
50
- self._measurement_descriptors += (
56
+ self._sweep_parameters += [(start, stop, step)] # TODO: Refactor by lazy DataDescriptor creation based on sweep parameters
57
+ self._measurement_descriptors += [(
51
58
  MeasurementTypeAdapter.DataDescriptor(
52
- name=f'{self._mode.value.bias_symbol}_b_{len(self._measurement_descriptors)}',
59
+ name=f'{self._mode.value.bias_symbol}_{len(self._measurement_descriptors)}',
53
60
  unit=self._mode.value.bias_unit,
54
61
  axes=(axis,)
55
62
  ),
@@ -58,7 +65,7 @@ class TransportMeasurement(MeasurementTypeAdapter):
58
65
  unit=self._mode.value.measure_unit,
59
66
  axes=(axis,)
60
67
  )
61
- )
68
+ )]
62
69
 
63
70
  def add_4_quadrant_sweep(self, start: float, stop: float, step: float, offset: float = 0):
64
71
  """
@@ -101,8 +108,8 @@ class TransportMeasurement(MeasurementTypeAdapter):
101
108
  offset: float
102
109
  Offset value by which <start> and <stop> are shifted. Default is 0.
103
110
  """
104
- self.add_sweep(amplitude + offset, -amplitude + offset, step)
105
- self.add_sweep(-amplitude + offset, amplitude + offset, -step)
111
+ self.add_sweep(amplitude + offset, -amplitude + offset, -step)
112
+ self.add_sweep(-amplitude + offset, amplitude + offset, step)
106
113
 
107
114
  @override
108
115
  @property
@@ -111,14 +118,31 @@ class TransportMeasurement(MeasurementTypeAdapter):
111
118
 
112
119
  @override
113
120
  @property
114
- def default_views(self) -> dict[str, HDF5.DataView]:
121
+ def default_views(self) -> dict[str, DataView]:
115
122
  return {
116
- 'IV': HDF5.DataView(
117
- view_type=HDF5.DataViewType.ONE_D,
123
+ 'IV': DataView(
124
+ view_params={
125
+ "labels": ('V', 'I'),
126
+ 'plot_style': 1,
127
+ 'markersize': 5
128
+ },
129
+ view_sets=list(itertools.chain(
130
+ DataViewSet(
131
+ x_path = DataReference(b.name if self._mode == MeasureModes.VI else m.name),
132
+ y_path = DataReference(m.name if self._mode == MeasureModes.VI else b.name),
133
+ ) for (b, m) in self._measurement_descriptors
134
+ ))
135
+ ),
136
+ 'VI': DataView(
137
+ view_params={
138
+ "labels": ('I', 'V'),
139
+ 'plot_style': 1,
140
+ 'markersize': 5
141
+ },
118
142
  view_sets=list(itertools.chain(
119
- HDF5.DataViewSet(
120
- x_path= HDF5.DataReference(b.name),
121
- y_path= HDF5.DataReference(m.name),
143
+ DataViewSet(
144
+ x_path = DataReference(b.name if self._mode == MeasureModes.IV else m.name),
145
+ y_path = DataReference(m.name if self._mode == MeasureModes.IV else b.name),
122
146
  ) for (b, m) in self._measurement_descriptors
123
147
  ))
124
148
  ),
@@ -127,9 +151,8 @@ class TransportMeasurement(MeasurementTypeAdapter):
127
151
  @override
128
152
  def perform_measurement(self) -> tuple['MeasurementTypeAdapter.GeneratedData', ...]:
129
153
  results = []
130
- for (bias, measurement) in self._measurement_descriptors:
131
- intended_bias_values = bias.axes[0].range
132
- bias_data, measurement_data = self._iv_device.take_IV(intended_bias_values)
154
+ for ((bias, measurement), sweep_params) in zip(self._measurement_descriptors, self._sweep_parameters):
155
+ bias_data, measurement_data = self._iv_device.take_IV((*sweep_params, self._sleep))
133
156
  results.append((
134
157
  bias.with_data(bias_data),
135
158
  measurement.with_data(measurement_data)
@@ -170,7 +170,7 @@ class ParentOfMeasurements(ABC):
170
170
  """
171
171
  if len(self._measurements) == 0:
172
172
  return 0
173
- return max(map(lambda m: len(m.expected_structure), self._measurements))
173
+ return max(map(lambda m: m.dimension, self._measurements))
174
174
 
175
175
  def create_datasets(self, data_file: hdf.Data, swept_axes: list[hdf_dataset]):
176
176
  """
@@ -248,6 +248,7 @@ class Sweep(ParentOfSweep, ParentOfMeasurements):
248
248
  sweep, size = self._generate_enumeration(data_file)
249
249
  try:
250
250
  for index, value in tqdm(sweep, desc=self._axis.name, bar_format=bar_format(), total=size, leave=False):
251
+ measurement_log.debug(f"Sweeping {self._axis.name} index: {index} value: {value}")
251
252
  try:
252
253
  self._setter(value)
253
254
  self._current_value = value
@@ -366,13 +367,6 @@ class DataGenerator(ABC):
366
367
  Handles storing data into datasets, and provides the structures for describing the data.
367
368
  """
368
369
 
369
- @property
370
- def dataset_category(self) -> Literal['data', 'analysis']:
371
- """
372
- The category into which the returned data should be sorted.
373
- """
374
- return 'data'
375
-
376
370
  def store(self, data_file: hdf.Data, data: tuple['MeasurementTypeAdapter.GeneratedData', ...], sweep_indices: tuple[int, ...]):
377
371
  """
378
372
  Store the generated [data] in the [data_file], while selecting based on the current [sweep_indices].
@@ -395,6 +389,7 @@ class DataGenerator(ABC):
395
389
  name: str
396
390
  axes: tuple[Axis, ...]
397
391
  unit: str = 'a.u.'
392
+ category: Literal['data', 'analysis'] = "data"
398
393
 
399
394
  def __post_init__(self):
400
395
  assert isinstance(self.name, str), "Name must be a string!"
@@ -402,6 +397,7 @@ class DataGenerator(ABC):
402
397
  for axis in self.axes:
403
398
  assert isinstance(axis, Axis), "Axes must be a tuple of Axis objects!"
404
399
  assert isinstance(self.unit, str), "Unit must be a string!"
400
+ assert self.category == "data" or self.category == "analysis", "Category must bei either 'data' or 'analysis'"
405
401
 
406
402
  def with_data(self, data: Union[np.ndarray, float]) -> 'MeasurementTypeAdapter.GeneratedData':
407
403
  """
@@ -421,19 +417,26 @@ class DataGenerator(ABC):
421
417
  # The API has different methods, depending on dimensionality, which it then unifies again to a generic case.
422
418
  # For political reasons, we have to live with this.
423
419
  if len(all_axes) == 0:
424
- return file.add_coordinate(name=self.name, unit=self.unit)
420
+ return file.add_coordinate(name=self.name, unit=self.unit, folder=self.category)
425
421
  elif len(all_axes) == 1:
426
- return file.add_value_vector(name=self.name,x = all_axes[0], unit=self.unit)
422
+ return file.add_value_vector(name=self.name,x = all_axes[0], unit=self.unit, folder=self.category)
427
423
  elif len(all_axes) == 2:
428
- return file.add_value_matrix(name=self.name, x = all_axes[0], y = all_axes[1], unit=self.unit)
424
+ return file.add_value_matrix(name=self.name, x = all_axes[0], y = all_axes[1], unit=self.unit, folder=self.category)
429
425
  elif len(all_axes) == 3:
430
- return file.add_value_box(name=self.name, x = all_axes[0], y = all_axes[1], z = all_axes[2], unit=self.unit)
426
+ return file.add_value_box(name=self.name, x = all_axes[0], y = all_axes[1], z = all_axes[2], unit=self.unit, folder=self.category)
431
427
  else:
432
428
  raise NotImplementedError("Qkit Store does not support more than 3 dimensions!")
433
429
 
434
430
  @property
435
431
  def ds_url(self):
436
- return f"/entry/data0/{self.name}"
432
+ return f"/entry/{self.category}0/{self.name}"
433
+
434
+ @property
435
+ def dimension(self):
436
+ """
437
+ The dimensionality of the expected Data.
438
+ """
439
+ return len(self.axes)
437
440
 
438
441
  @dataclass(frozen=True)
439
442
  class GeneratedData:
@@ -450,7 +453,7 @@ class DataGenerator(ABC):
450
453
  assert isinstance(self.data, np.ndarray), "MeasurementData must be an ndarray!"
451
454
  assert len(self.descriptor.axes) == len(self.data.shape), f"Data shape (d={len(self.data.shape)}) incongruent with descriptor (d={len(self.descriptor.axes)})"
452
455
  for (i, axis) in enumerate(self.descriptor.axes):
453
- assert self.data.shape[i] == len(axis.range), f"Axis ({axis.name}) length and data length mismatch"
456
+ assert self.data.shape[i] == len(axis.range), f"Axis {i} ({axis.name}) length ({len(axis.range)}) and data length ({self.data.shape[i]}) mismatch"
454
457
 
455
458
  def write_data(self, file: hdf.Data, sweep_indices: tuple[int, ...]):
456
459
  """
@@ -530,11 +533,6 @@ class AnalysisTypeAdapter(DataGenerator, ABC):
530
533
  measurement_log.debug(f"Creating View {name} for Analysis.")
531
534
  view.write(data_file, name)
532
535
 
533
- @override
534
- @property
535
- def dataset_category(self) -> Literal['data', 'analysis']:
536
- return 'analysis'
537
-
538
536
  @abstractmethod
539
537
  def expected_structure(self, parent_schema: tuple['MeasurementTypeAdapter.DataDescriptor', ...]) -> tuple[
540
538
  'MeasurementTypeAdapter.DataDescriptor', ...]:
@@ -587,9 +585,9 @@ class MeasurementTypeAdapter(DataGenerator, ABC):
587
585
 
588
586
  views = self.default_views
589
587
  assert isinstance(views, dict), "Default views must be a dict of str to DataViews!"
590
- for name, view in views:
588
+ for name, view in views.items():
591
589
  assert isinstance(name, str), "Name of view must be a string!"
592
- assert isinstance(view, DataView), "Each view must be of type DataView!"
590
+ assert isinstance(view, DataView), f"Each view must be of type DataView! But {name} is {type(view)}"
593
591
  measurement_log.debug(f"Creating view {name}.")
594
592
  view.write(data_file, name)
595
593
 
@@ -618,6 +616,13 @@ class MeasurementTypeAdapter(DataGenerator, ABC):
618
616
  assert isinstance(analysis, AnalysisTypeAdapter), "Analysis must be of type AnalysisTypeAdapter!"
619
617
  self._analyses.append(analysis)
620
618
  return self
619
+
620
+ @property
621
+ def dimension(self):
622
+ """
623
+ Determine the dimensionality of the measurement as the maximum dimensionality of any expected structure.
624
+ """
625
+ return max(map(lambda es: es.dimension, self.expected_structure))
621
626
 
622
627
  @property
623
628
  @abstractmethod
@@ -791,6 +796,9 @@ class Experiment(ParentOfSweep, ParentOfMeasurements):
791
796
  measurement_log.info("Starting measurement")
792
797
  self.run_measurements(data_file, ())
793
798
  self._run_child_sweep(data_file, ())
799
+ except Exception as e:
800
+ import traceback
801
+ traceback.print_exc()
794
802
  finally:
795
803
  # Calling into existing plotting code in the background.
796
804
  measurement_log.info("Creating plots...")
@@ -1 +0,0 @@
1
- __version__ = "0.5.3"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes