quarchpy 2.2.7.dev1__py2.py3-none-any.whl → 2.2.8.dev1__py2.py3-none-any.whl

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 (211) hide show
  1. quarchpy/.idea/.name +1 -0
  2. quarchpy/.idea/inspectionProfiles/Project_Default.xml +39 -1
  3. quarchpy/.idea/misc.xml +2 -2
  4. quarchpy/.idea/quarchpy.iml +1 -1
  5. quarchpy/.idea/vcs.xml +6 -0
  6. quarchpy/.idea/workspace.xml +119 -21
  7. quarchpy/__pycache__/__init__.cpython-311.pyc +0 -0
  8. quarchpy/__pycache__/__init__.cpython-312.pyc +0 -0
  9. quarchpy/__pycache__/_version.cpython-311.pyc +0 -0
  10. quarchpy/__pycache__/_version.cpython-312.pyc +0 -0
  11. quarchpy/__pycache__/connection.cpython-311.pyc +0 -0
  12. quarchpy/__pycache__/connection.cpython-312.pyc +0 -0
  13. quarchpy/__pycache__/run.cpython-311.pyc +0 -0
  14. quarchpy/__pycache__/run.cpython-312.pyc +0 -0
  15. quarchpy/_version.py +1 -1
  16. quarchpy/config_files/__pycache__/__init__.cpython-311.pyc +0 -0
  17. quarchpy/config_files/__pycache__/__init__.cpython-312.pyc +0 -0
  18. quarchpy/config_files/__pycache__/quarch_config_parser.cpython-311.pyc +0 -0
  19. quarchpy/config_files/__pycache__/quarch_config_parser.cpython-312.pyc +0 -0
  20. quarchpy/connection_specific/QPS/win-amd64/InstallType.dat +1 -0
  21. quarchpy/connection_specific/QPS/win-amd64/qis/myFile.csv +50 -0
  22. quarchpy/connection_specific/__pycache__/StreamChannels.cpython-311.pyc +0 -0
  23. quarchpy/connection_specific/__pycache__/StreamChannels.cpython-312.pyc +0 -0
  24. quarchpy/connection_specific/__pycache__/__init__.cpython-311.pyc +0 -0
  25. quarchpy/connection_specific/__pycache__/__init__.cpython-312.pyc +0 -0
  26. quarchpy/connection_specific/__pycache__/connection_QIS.cpython-311.pyc +0 -0
  27. quarchpy/connection_specific/__pycache__/connection_QIS.cpython-312.pyc +0 -0
  28. quarchpy/connection_specific/__pycache__/connection_QPS.cpython-311.pyc +0 -0
  29. quarchpy/connection_specific/__pycache__/connection_QPS.cpython-312.pyc +0 -0
  30. quarchpy/connection_specific/__pycache__/connection_ReST.cpython-311.pyc +0 -0
  31. quarchpy/connection_specific/__pycache__/connection_ReST.cpython-312.pyc +0 -0
  32. quarchpy/connection_specific/__pycache__/connection_Serial.cpython-311.pyc +0 -0
  33. quarchpy/connection_specific/__pycache__/connection_Serial.cpython-312.pyc +0 -0
  34. quarchpy/connection_specific/__pycache__/connection_TCP.cpython-311.pyc +0 -0
  35. quarchpy/connection_specific/__pycache__/connection_TCP.cpython-312.pyc +0 -0
  36. quarchpy/connection_specific/__pycache__/connection_USB.cpython-311.pyc +0 -0
  37. quarchpy/connection_specific/__pycache__/connection_USB.cpython-312.pyc +0 -0
  38. quarchpy/connection_specific/__pycache__/mDNS.cpython-311.pyc +0 -0
  39. quarchpy/connection_specific/__pycache__/mDNS.cpython-312.pyc +0 -0
  40. quarchpy/connection_specific/connection_QIS.py +1 -0
  41. quarchpy/connection_specific/jdk_j21_jres/__pycache__/__init__.cpython-311.pyc +0 -0
  42. quarchpy/connection_specific/jdk_j21_jres/__pycache__/__init__.cpython-312.pyc +0 -0
  43. quarchpy/connection_specific/jdk_j21_jres/__pycache__/fix_permissions.cpython-311.pyc +0 -0
  44. quarchpy/connection_specific/jdk_j21_jres/__pycache__/fix_permissions.cpython-312.pyc +0 -0
  45. quarchpy/connection_specific/serial/__pycache__/__init__.cpython-311.pyc +0 -0
  46. quarchpy/connection_specific/serial/__pycache__/__init__.cpython-312.pyc +0 -0
  47. quarchpy/connection_specific/serial/__pycache__/serialutil.cpython-311.pyc +0 -0
  48. quarchpy/connection_specific/serial/__pycache__/serialutil.cpython-312.pyc +0 -0
  49. quarchpy/connection_specific/serial/__pycache__/serialwin32.cpython-311.pyc +0 -0
  50. quarchpy/connection_specific/serial/__pycache__/serialwin32.cpython-312.pyc +0 -0
  51. quarchpy/connection_specific/serial/__pycache__/win32.cpython-311.pyc +0 -0
  52. quarchpy/connection_specific/serial/__pycache__/win32.cpython-312.pyc +0 -0
  53. quarchpy/connection_specific/serial/tools/__pycache__/__init__.cpython-311.pyc +0 -0
  54. quarchpy/connection_specific/serial/tools/__pycache__/__init__.cpython-312.pyc +0 -0
  55. quarchpy/connection_specific/serial/tools/__pycache__/list_ports.cpython-311.pyc +0 -0
  56. quarchpy/connection_specific/serial/tools/__pycache__/list_ports.cpython-312.pyc +0 -0
  57. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_common.cpython-311.pyc +0 -0
  58. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_common.cpython-312.pyc +0 -0
  59. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_windows.cpython-311.pyc +0 -0
  60. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_windows.cpython-312.pyc +0 -0
  61. quarchpy/connection_specific/usb_libs/__pycache__/libusb1.cpython-312.pyc +0 -0
  62. quarchpy/connection_specific/usb_libs/__pycache__/usb1.cpython-312.pyc +0 -0
  63. quarchpy/debug/SystemTest.py +29 -14
  64. quarchpy/debug/__pycache__/SystemTest.cpython-311.pyc +0 -0
  65. quarchpy/debug/__pycache__/SystemTest.cpython-312.pyc +0 -0
  66. quarchpy/debug/__pycache__/__init__.cpython-311.pyc +0 -0
  67. quarchpy/debug/__pycache__/__init__.cpython-312.pyc +0 -0
  68. quarchpy/debug/__pycache__/module_debug.cpython-311.pyc +0 -0
  69. quarchpy/debug/__pycache__/module_debug.cpython-312.pyc +0 -0
  70. quarchpy/debug/__pycache__/simple_terminal.cpython-311.pyc +0 -0
  71. quarchpy/debug/__pycache__/simple_terminal.cpython-312.pyc +0 -0
  72. quarchpy/debug/__pycache__/upgrade_quarchpy.cpython-311.pyc +0 -0
  73. quarchpy/debug/__pycache__/upgrade_quarchpy.cpython-312.pyc +0 -0
  74. quarchpy/debug/__pycache__/versionCompare.cpython-311.pyc +0 -0
  75. quarchpy/debug/__pycache__/versionCompare.cpython-312.pyc +0 -0
  76. quarchpy/device/__pycache__/__init__.cpython-311.pyc +0 -0
  77. quarchpy/device/__pycache__/__init__.cpython-312.pyc +0 -0
  78. quarchpy/device/__pycache__/device.cpython-311.pyc +0 -0
  79. quarchpy/device/__pycache__/device.cpython-312.pyc +0 -0
  80. quarchpy/device/__pycache__/quarchArray.cpython-311.pyc +0 -0
  81. quarchpy/device/__pycache__/quarchArray.cpython-312.pyc +0 -0
  82. quarchpy/device/__pycache__/quarchPPM.cpython-311.pyc +0 -0
  83. quarchpy/device/__pycache__/quarchPPM.cpython-312.pyc +0 -0
  84. quarchpy/device/__pycache__/quarchQPS.cpython-311.pyc +0 -0
  85. quarchpy/device/__pycache__/quarchQPS.cpython-312.pyc +0 -0
  86. quarchpy/device/__pycache__/scanDevices.cpython-311.pyc +0 -0
  87. quarchpy/device/__pycache__/scanDevices.cpython-312.pyc +0 -0
  88. quarchpy/device/quarchQPS.py +1 -2
  89. quarchpy/disk_test/__pycache__/AbsDiskFinder.cpython-311.pyc +0 -0
  90. quarchpy/disk_test/__pycache__/AbsDiskFinder.cpython-312.pyc +0 -0
  91. quarchpy/disk_test/__pycache__/DiskTargetSelection.cpython-311.pyc +0 -0
  92. quarchpy/disk_test/__pycache__/DiskTargetSelection.cpython-312.pyc +0 -0
  93. quarchpy/disk_test/__pycache__/__init__.cpython-311.pyc +0 -0
  94. quarchpy/disk_test/__pycache__/__init__.cpython-312.pyc +0 -0
  95. quarchpy/disk_test/__pycache__/iometerDiskFinder.cpython-311.pyc +0 -0
  96. quarchpy/disk_test/__pycache__/iometerDiskFinder.cpython-312.pyc +0 -0
  97. quarchpy/docs/CHANGES.rst +4 -0
  98. quarchpy/docs/_build/doctrees/CHANGES.doctree +0 -0
  99. quarchpy/docs/_build/doctrees/environment.pickle +0 -0
  100. quarchpy/docs/_build/doctrees/source/changelog.doctree +0 -0
  101. quarchpy/docs/_build/doctrees/source/quarchpy.fio.doctree +0 -0
  102. quarchpy/docs/_build/html/CHANGES.html +145 -139
  103. quarchpy/docs/_build/html/_sources/CHANGES.rst.txt +7 -0
  104. quarchpy/docs/_build/html/genindex.html +8 -2
  105. quarchpy/docs/_build/html/index.html +71 -70
  106. quarchpy/docs/_build/html/objects.inv +0 -0
  107. quarchpy/docs/_build/html/searchindex.js +1 -1
  108. quarchpy/docs/_build/html/source/changelog.html +216 -209
  109. quarchpy/docs/_build/html/source/quarchpy.fio.html +64 -0
  110. quarchpy/docs/_build/html/source/quarchpy.html +3 -0
  111. quarchpy/fio/__pycache__/FIO_interface.cpython-311.pyc +0 -0
  112. quarchpy/fio/__pycache__/FIO_interface.cpython-312.pyc +0 -0
  113. quarchpy/fio/__pycache__/__init__.cpython-311.pyc +0 -0
  114. quarchpy/fio/__pycache__/__init__.cpython-312.pyc +0 -0
  115. quarchpy/iometer/__pycache__/__init__.cpython-311.pyc +0 -0
  116. quarchpy/iometer/__pycache__/__init__.cpython-312.pyc +0 -0
  117. quarchpy/iometer/__pycache__/gen_iometer_template.cpython-311.pyc +0 -0
  118. quarchpy/iometer/__pycache__/{gen_iometer_template.cpython-313.pyc → gen_iometer_template.cpython-312.pyc} +0 -0
  119. quarchpy/iometer/__pycache__/iometerFuncs.cpython-311.pyc +0 -0
  120. quarchpy/iometer/__pycache__/iometerFuncs.cpython-312.pyc +0 -0
  121. quarchpy/qis/__pycache__/StreamHeaderInfo.cpython-311.pyc +0 -0
  122. quarchpy/qis/__pycache__/StreamHeaderInfo.cpython-312.pyc +0 -0
  123. quarchpy/qis/__pycache__/__init__.cpython-311.pyc +0 -0
  124. quarchpy/qis/__pycache__/__init__.cpython-312.pyc +0 -0
  125. quarchpy/qis/__pycache__/qisFuncs.cpython-311.pyc +0 -0
  126. quarchpy/qis/__pycache__/qisFuncs.cpython-312.pyc +0 -0
  127. quarchpy/qis/qisFuncs.py +36 -39
  128. quarchpy/qps/__pycache__/__init__.cpython-311.pyc +0 -0
  129. quarchpy/qps/__pycache__/__init__.cpython-312.pyc +0 -0
  130. quarchpy/qps/__pycache__/qpsFuncs.cpython-311.pyc +0 -0
  131. quarchpy/qps/__pycache__/qpsFuncs.cpython-312.pyc +0 -0
  132. quarchpy/qps/qpsFuncs.py +7 -10
  133. quarchpy/user_interface/__pycache__/__init__.cpython-311.pyc +0 -0
  134. quarchpy/user_interface/__pycache__/__init__.cpython-312.pyc +0 -0
  135. quarchpy/user_interface/__pycache__/user_interface.cpython-311.pyc +0 -0
  136. quarchpy/user_interface/__pycache__/user_interface.cpython-312.pyc +0 -0
  137. quarchpy/utilities/__pycache__/TestCenter.cpython-311.pyc +0 -0
  138. quarchpy/utilities/__pycache__/TestCenter.cpython-312.pyc +0 -0
  139. quarchpy/utilities/__pycache__/TimeValue.cpython-311.pyc +0 -0
  140. quarchpy/utilities/__pycache__/TimeValue.cpython-312.pyc +0 -0
  141. quarchpy/utilities/__pycache__/Version.cpython-311.pyc +0 -0
  142. quarchpy/utilities/__pycache__/Version.cpython-312.pyc +0 -0
  143. quarchpy/utilities/__pycache__/__init__.cpython-311.pyc +0 -0
  144. quarchpy/utilities/__pycache__/__init__.cpython-312.pyc +0 -0
  145. {quarchpy-2.2.7.dev1.dist-info → quarchpy-2.2.8.dev1.dist-info}/METADATA +7 -12
  146. {quarchpy-2.2.7.dev1.dist-info → quarchpy-2.2.8.dev1.dist-info}/RECORD +148 -126
  147. {quarchpy-2.2.7.dev1.dist-info → quarchpy-2.2.8.dev1.dist-info}/WHEEL +1 -1
  148. quarchpy/.idea/.gitignore +0 -3
  149. quarchpy/_version.py.bak +0 -1
  150. quarchpy/config_files/__pycache__/__init__.cpython-313.pyc +0 -0
  151. quarchpy/config_files/__pycache__/quarch_config_parser.cpython-313.pyc +0 -0
  152. quarchpy/connection_specific/__pycache__/StreamChannels.cpython-313.pyc +0 -0
  153. quarchpy/connection_specific/__pycache__/__init__.cpython-313.pyc +0 -0
  154. quarchpy/connection_specific/__pycache__/connection_QIS.cpython-313.pyc +0 -0
  155. quarchpy/connection_specific/__pycache__/connection_QPS.cpython-313.pyc +0 -0
  156. quarchpy/connection_specific/__pycache__/connection_ReST.cpython-313.pyc +0 -0
  157. quarchpy/connection_specific/__pycache__/connection_Serial.cpython-313.pyc +0 -0
  158. quarchpy/connection_specific/__pycache__/connection_TCP.cpython-313.pyc +0 -0
  159. quarchpy/connection_specific/__pycache__/connection_Telnet.cpython-313.pyc +0 -0
  160. quarchpy/connection_specific/__pycache__/connection_USB.cpython-313.pyc +0 -0
  161. quarchpy/connection_specific/__pycache__/mDNS.cpython-313.pyc +0 -0
  162. quarchpy/connection_specific/connection_QPS.py.bak +0 -242
  163. quarchpy/connection_specific/jdk_j21_jres/__pycache__/__init__.cpython-313.pyc +0 -0
  164. quarchpy/connection_specific/jdk_j21_jres/__pycache__/fix_permissions.cpython-313.pyc +0 -0
  165. quarchpy/connection_specific/serial/__pycache__/__init__.cpython-313.pyc +0 -0
  166. quarchpy/connection_specific/serial/__pycache__/serialutil.cpython-313.pyc +0 -0
  167. quarchpy/connection_specific/serial/__pycache__/serialwin32.cpython-313.pyc +0 -0
  168. quarchpy/connection_specific/serial/__pycache__/win32.cpython-313.pyc +0 -0
  169. quarchpy/connection_specific/serial/tools/__pycache__/__init__.cpython-313.pyc +0 -0
  170. quarchpy/connection_specific/serial/tools/__pycache__/list_ports.cpython-313.pyc +0 -0
  171. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_common.cpython-313.pyc +0 -0
  172. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_windows.cpython-313.pyc +0 -0
  173. quarchpy/debug/__pycache__/SystemTest.cpython-313.pyc +0 -0
  174. quarchpy/debug/__pycache__/__init__.cpython-313.pyc +0 -0
  175. quarchpy/debug/__pycache__/module_debug.cpython-313.pyc +0 -0
  176. quarchpy/debug/__pycache__/simple_terminal.cpython-313.pyc +0 -0
  177. quarchpy/debug/__pycache__/upgrade_quarchpy.cpython-313.pyc +0 -0
  178. quarchpy/debug/__pycache__/versionCompare.cpython-313.pyc +0 -0
  179. quarchpy/device/__pycache__/__init__.cpython-313.pyc +0 -0
  180. quarchpy/device/__pycache__/device.cpython-313.pyc +0 -0
  181. quarchpy/device/__pycache__/quarchArray.cpython-313.pyc +0 -0
  182. quarchpy/device/__pycache__/quarchPPM.cpython-313.pyc +0 -0
  183. quarchpy/device/__pycache__/quarchQPS.cpython-313.pyc +0 -0
  184. quarchpy/device/__pycache__/scanDevices.cpython-313.pyc +0 -0
  185. quarchpy/device/quarchQPS.py.bak +0 -398
  186. quarchpy/disk_test/__pycache__/AbsDiskFinder.cpython-313.pyc +0 -0
  187. quarchpy/disk_test/__pycache__/DiskTargetSelection.cpython-313.pyc +0 -0
  188. quarchpy/disk_test/__pycache__/__init__.cpython-313.pyc +0 -0
  189. quarchpy/disk_test/__pycache__/iometerDiskFinder.cpython-313.pyc +0 -0
  190. quarchpy/docs/CHANGES.rst.bak +0 -430
  191. quarchpy/docs/_build/html/.buildinfo.bak +0 -4
  192. quarchpy/docs/_build/html/_static/github-banner.svg +0 -5
  193. quarchpy/fio/FIO_interface.py.bak +0 -317
  194. quarchpy/fio/__pycache__/FIO_interface.cpython-313.pyc +0 -0
  195. quarchpy/fio/__pycache__/__init__.cpython-313.pyc +0 -0
  196. quarchpy/fio/__pycache__/fioDiskFinder.cpython-311.pyc +0 -0
  197. quarchpy/fio/__pycache__/fioDiskFinder.cpython-313.pyc +0 -0
  198. quarchpy/iometer/__pycache__/__init__.cpython-313.pyc +0 -0
  199. quarchpy/iometer/__pycache__/iometerFuncs.cpython-313.pyc +0 -0
  200. quarchpy/qis/__pycache__/StreamHeaderInfo.cpython-313.pyc +0 -0
  201. quarchpy/qis/__pycache__/__init__.cpython-313.pyc +0 -0
  202. quarchpy/qis/__pycache__/qisFuncs.cpython-313.pyc +0 -0
  203. quarchpy/qps/__pycache__/__init__.cpython-313.pyc +0 -0
  204. quarchpy/qps/__pycache__/qpsFuncs.cpython-313.pyc +0 -0
  205. quarchpy/user_interface/__pycache__/__init__.cpython-313.pyc +0 -0
  206. quarchpy/user_interface/__pycache__/user_interface.cpython-313.pyc +0 -0
  207. quarchpy/utilities/__pycache__/TestCenter.cpython-313.pyc +0 -0
  208. quarchpy/utilities/__pycache__/TimeValue.cpython-313.pyc +0 -0
  209. quarchpy/utilities/__pycache__/Version.cpython-313.pyc +0 -0
  210. quarchpy/utilities/__pycache__/__init__.cpython-313.pyc +0 -0
  211. {quarchpy-2.2.7.dev1.dist-info → quarchpy-2.2.8.dev1.dist-info}/top_level.txt +0 -0
@@ -40,11 +40,75 @@
40
40
  </section>
41
41
  <section id="module-quarchpy.fio.FIO_interface">
42
42
  <span id="quarchpy-fio-fio-interface-module"></span><h2>quarchpy.fio.FIO_interface module<a class="headerlink" href="#module-quarchpy.fio.FIO_interface" title="Link to this heading">¶</a></h2>
43
+ <dl class="py function">
44
+ <dt class="sig sig-object py" id="quarchpy.fio.FIO_interface.convert_qis_stream_to_unix_time">
45
+ <span class="sig-prename descclassname"><span class="pre">quarchpy.fio.FIO_interface.</span></span><span class="sig-name descname"><span class="pre">convert_qis_stream_to_unix_time</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">qis_stream_file</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">unix_stream_start_time</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quarchpy.fio.FIO_interface.convert_qis_stream_to_unix_time" title="Link to this definition">¶</a></dt>
46
+ <dd><p>Converts a QIS stream CSV file to Unix time by adding the unixStreamStartTime to the first column
47
+ in each row, taking into account the time units provided in both the CSV header and the start time.</p>
48
+ <dl class="field-list simple">
49
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
50
+ <dd class="field-odd"><ul class="simple">
51
+ <li><p><strong>qis_stream_file</strong> (<em>str</em>) – The path to the QIS stream CSV file.</p></li>
52
+ <li><p><strong>unix_stream_start_time</strong> (<em>str</em>) – The starting Unix time with units (e.g., “1737374310S”, “1737374310000mS”).</p></li>
53
+ </ul>
54
+ </dd>
55
+ <dt class="field-even">Returns<span class="colon">:</span></dt>
56
+ <dd class="field-even"><p>Path to the converted CSV file.</p>
57
+ </dd>
58
+ <dt class="field-odd">Return type<span class="colon">:</span></dt>
59
+ <dd class="field-odd"><p>str</p>
60
+ </dd>
61
+ </dl>
62
+ </dd></dl>
63
+
64
+ <dl class="py function">
65
+ <dt class="sig sig-object py" id="quarchpy.fio.FIO_interface.fio_json_to_csv">
66
+ <span class="sig-prename descclassname"><span class="pre">quarchpy.fio.FIO_interface.</span></span><span class="sig-name descname"><span class="pre">fio_json_to_csv</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">output_file</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quarchpy.fio.FIO_interface.fio_json_to_csv" title="Link to this definition">¶</a></dt>
67
+ <dd></dd></dl>
68
+
43
69
  <dl class="py function">
44
70
  <dt class="sig sig-object py" id="quarchpy.fio.FIO_interface.follow">
45
71
  <span class="sig-prename descclassname"><span class="pre">quarchpy.fio.FIO_interface.</span></span><span class="sig-name descname"><span class="pre">follow</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">thefile</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">p</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quarchpy.fio.FIO_interface.follow" title="Link to this definition">¶</a></dt>
46
72
  <dd></dd></dl>
47
73
 
74
+ <dl class="py function">
75
+ <dt class="sig sig-object py" id="quarchpy.fio.FIO_interface.merge_fio_qis_stream">
76
+ <span class="sig-prename descclassname"><span class="pre">quarchpy.fio.FIO_interface.</span></span><span class="sig-name descname"><span class="pre">merge_fio_qis_stream</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">qis_stream_file</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fio_output_file</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">unix_stream_start_time</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">output_file</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">rounding_option</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'round'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quarchpy.fio.FIO_interface.merge_fio_qis_stream" title="Link to this definition">¶</a></dt>
77
+ <dd><p>Merge FIO and QIS data into a single CSV file.</p>
78
+ <dl class="simple">
79
+ <dt>For each FIO entry:</dt><dd><ul class="simple">
80
+ <li><p>If timestamps match, append FIO data to the corresponding QIS row.</p></li>
81
+ <li><dl class="simple">
82
+ <dt>If no match, handle based on <cite>rounding_option</cite>:</dt><dd><ul>
83
+ <li><p>“round”: Find the nearest QIS time and add FIO data to that row.</p></li>
84
+ <li><p>“insert”: Add a new row with blank QIS data and only FIO data.</p></li>
85
+ </ul>
86
+ </dd>
87
+ </dl>
88
+ </li>
89
+ </ul>
90
+ </dd>
91
+ </dl>
92
+ <dl class="field-list simple">
93
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
94
+ <dd class="field-odd"><ul class="simple">
95
+ <li><p><strong>qis_stream_file</strong> (<em>str</em>) – Path to the QIS CSV file (converted to Unix time).</p></li>
96
+ <li><p><strong>fio_output_file</strong> (<em>str</em>) – Path to the FIO output file (in JSON format).</p></li>
97
+ <li><p><strong>unix_stream_start_time</strong> (<em>str</em>) – Starting Unix timestamp for the QIS stream.</p></li>
98
+ <li><p><strong>output_file</strong> (<em>str</em><em>, </em><em>optional</em>) – Output file path for the merged CSV. If not provided, the file is saved
99
+ with “_merged” appended to the QIS file name.</p></li>
100
+ <li><p><strong>rounding_option</strong> (<em>str</em>) – Determines how to handle mismatched times (“round” or “insert”).</p></li>
101
+ </ul>
102
+ </dd>
103
+ <dt class="field-even">Returns<span class="colon">:</span></dt>
104
+ <dd class="field-even"><p>Path to the merged CSV file.</p>
105
+ </dd>
106
+ <dt class="field-odd">Return type<span class="colon">:</span></dt>
107
+ <dd class="field-odd"><p>str</p>
108
+ </dd>
109
+ </dl>
110
+ </dd></dl>
111
+
48
112
  <dl class="py function">
49
113
  <dt class="sig sig-object py" id="quarchpy.fio.FIO_interface.return_data">
50
114
  <span class="sig-prename descclassname"><span class="pre">quarchpy.fio.FIO_interface.</span></span><span class="sig-name descname"><span class="pre">return_data</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">output_file</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">p</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fioCallbacks</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">myStream</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">user_data</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">arguments</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quarchpy.fio.FIO_interface.return_data" title="Link to this definition">¶</a></dt>
@@ -505,7 +505,10 @@
505
505
  <li class="toctree-l1"><a class="reference internal" href="quarchpy.fio.html">quarchpy.fio package</a><ul>
506
506
  <li class="toctree-l2"><a class="reference internal" href="quarchpy.fio.html#submodules">Submodules</a></li>
507
507
  <li class="toctree-l2"><a class="reference internal" href="quarchpy.fio.html#module-quarchpy.fio.FIO_interface">quarchpy.fio.FIO_interface module</a><ul>
508
+ <li class="toctree-l3"><a class="reference internal" href="quarchpy.fio.html#quarchpy.fio.FIO_interface.convert_qis_stream_to_unix_time"><code class="docutils literal notranslate"><span class="pre">convert_qis_stream_to_unix_time()</span></code></a></li>
509
+ <li class="toctree-l3"><a class="reference internal" href="quarchpy.fio.html#quarchpy.fio.FIO_interface.fio_json_to_csv"><code class="docutils literal notranslate"><span class="pre">fio_json_to_csv()</span></code></a></li>
508
510
  <li class="toctree-l3"><a class="reference internal" href="quarchpy.fio.html#quarchpy.fio.FIO_interface.follow"><code class="docutils literal notranslate"><span class="pre">follow()</span></code></a></li>
511
+ <li class="toctree-l3"><a class="reference internal" href="quarchpy.fio.html#quarchpy.fio.FIO_interface.merge_fio_qis_stream"><code class="docutils literal notranslate"><span class="pre">merge_fio_qis_stream()</span></code></a></li>
509
512
  <li class="toctree-l3"><a class="reference internal" href="quarchpy.fio.html#quarchpy.fio.FIO_interface.return_data"><code class="docutils literal notranslate"><span class="pre">return_data()</span></code></a></li>
510
513
  <li class="toctree-l3"><a class="reference internal" href="quarchpy.fio.html#quarchpy.fio.FIO_interface.runFIO"><code class="docutils literal notranslate"><span class="pre">runFIO()</span></code></a></li>
511
514
  <li class="toctree-l3"><a class="reference internal" href="quarchpy.fio.html#quarchpy.fio.FIO_interface.start_fio"><code class="docutils literal notranslate"><span class="pre">start_fio()</span></code></a></li>
quarchpy/qis/qisFuncs.py CHANGED
@@ -2,7 +2,7 @@
2
2
  Contains general functions for starting and stopping QIS processes
3
3
  """
4
4
 
5
- import os, sys
5
+ import os, sys
6
6
  import time, platform
7
7
  from threading import Thread, Lock, Event, active_count
8
8
  from queue import Queue, Empty
@@ -12,6 +12,7 @@ from quarchpy.user_interface.user_interface import printText, logDebug
12
12
  import subprocess
13
13
  import logging
14
14
 
15
+
15
16
  def isQisRunning():
16
17
  """
17
18
  Checks if a local instance of QIS is running and responding
@@ -34,7 +35,7 @@ def isQisRunning():
34
35
  pass
35
36
  if (qisRunning is False):
36
37
  logging.debug("QIS is not running")
37
- return False
38
+ return False
38
39
  else:
39
40
  logging.debug("QIS is running")
40
41
  return True
@@ -45,7 +46,7 @@ def isQisRunningAndResponding(timeout=2):
45
46
  checks if qis is running and responding to a $version
46
47
  """
47
48
  qisRunning = isQisRunning()
48
- if qisRunning ==False:
49
+ if qisRunning == False:
49
50
  logging.debug("QIS is not running")
50
51
  return False
51
52
 
@@ -63,7 +64,6 @@ def isQisRunningAndResponding(timeout=2):
63
64
  time.sleep(timeout / maxCounter) # We attempt to get QIS
64
65
  counter += 1
65
66
 
66
-
67
67
  if (qisRunning is False):
68
68
  logging.debug("QIS is not running")
69
69
  return False
@@ -91,10 +91,11 @@ def startLocalQis(terminal=False, headless=False, args=None, timeout=20):
91
91
  java_path = os.path.dirname(os.path.abspath(__file__))
92
92
  java_path, junk = os.path.split(java_path)
93
93
  java_path = os.path.join(java_path, "connection_specific", "jdk_j21_jres")
94
+ java_path = "\"" + java_path
94
95
 
95
96
  # change directory to /QPS/QIS
96
97
  qis_path = os.path.dirname(os.path.abspath(__file__))
97
- qis_path,junk = os.path.split (qis_path)
98
+ qis_path, junk = os.path.split(qis_path)
98
99
 
99
100
  # OS
100
101
  current_os = platform.system()
@@ -108,13 +109,13 @@ def startLocalQis(terminal=False, headless=False, args=None, timeout=20):
108
109
  return
109
110
 
110
111
  # ensure the jres folder has the required permissions
111
- permissions,message= find_java_permissions()
112
+ permissions, message = find_java_permissions()
112
113
  if permissions is False:
113
114
  logging.warning(message)
114
115
  logging.warning("Not having correct permissions will prevent Quarch Java Programs to launch")
115
116
  logging.warning("Run \"python -m quarchpy.run permission_fix\" to fix this.")
116
117
  user_input = input("Would you like to fix permissions now? (Y/N)")
117
- if user_input.lower()=="y":
118
+ if user_input.lower() == "y":
118
119
  fix_permissions()
119
120
  permissions, message = find_java_permissions()
120
121
  time.sleep(0.5)
@@ -123,8 +124,6 @@ def startLocalQis(terminal=False, headless=False, args=None, timeout=20):
123
124
  else:
124
125
  logging.warning("Attempt to fix permissions was successful. Now continuing.")
125
126
 
126
-
127
-
128
127
  # if current_os != "Windows":
129
128
  # subprocess.call(['chmod', '-R', '+rwx', java_path])
130
129
 
@@ -150,16 +149,14 @@ def startLocalQis(terminal=False, headless=False, args=None, timeout=20):
150
149
 
151
150
  # Building the command
152
151
 
153
-
154
152
  # prefer IPV4 to IPV6
155
153
  ipv4v6_vm_args = "-Djava.net.preferIPv4Stack=true -Djava.net.preferIPv6Addresses=false"
156
154
 
157
155
  # Process command prefix. Needed for headless mode, to support OSs with no system tray.
158
- cmd_prefix =ipv4v6_vm_args
156
+ cmd_prefix = ipv4v6_vm_args
159
157
  if headless is True or (args is not None and "-headless" in args):
160
158
  cmd_prefix += " -Djava.awt.headless=true"
161
159
 
162
-
163
160
  # Process command suffix (additional standard options for QIS).
164
161
  if terminal is True:
165
162
  cmd_suffix = " -terminal"
@@ -177,9 +174,8 @@ def startLocalQis(terminal=False, headless=False, args=None, timeout=20):
177
174
  # record current working directory
178
175
  current_dir = os.getcwd()
179
176
 
177
+ command = "java\" " + cmd_prefix + " -jar qis.jar" + cmd_suffix
180
178
 
181
- command = "java " + cmd_prefix + " -jar qis.jar" + cmd_suffix
182
-
183
179
  # different start for different OS
184
180
  if current_os == "Windows":
185
181
  command = java_path + "\\win_amd64_jdk_21_jre\\bin\\" + command
@@ -195,9 +191,10 @@ def startLocalQis(terminal=False, headless=False, args=None, timeout=20):
195
191
  command = java_path + "\\win_amd64_jdk_21_jre\\bin\\" + command
196
192
 
197
193
  # Use the command and check QIS has launched
198
- if "-logging=ON" in str(args): #If logging to a terminal window is on then os.system should be used to view logging.
199
- process = subprocess.Popen(command,shell=True)
200
- startTime = time.time() #Checks for Popen launch only
194
+ # If logging to a terminal window is on then os.system should be used to view logging.
195
+ if "-logging=ON" in str(args):
196
+ process = subprocess.Popen(command, shell=True)
197
+ startTime = time.time() # Checks for Popen launch only
201
198
  while not isQisRunning():
202
199
  if time.time() - startTime > timeout:
203
200
  raise TimeoutError("QIS failed to launch within timelimit of " + str(timeout) + " sec.")
@@ -208,16 +205,15 @@ def startLocalQis(terminal=False, headless=False, args=None, timeout=20):
208
205
  else:
209
206
  process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, shell=True)
210
207
 
211
- startTime = time.time() #Checks for Popen launch only
208
+ startTime = time.time() #Checks for Popen launch only
212
209
  while not isQisRunning():
213
210
  _get_std_msg_and_err_from_QIS_process(process)
214
211
  if time.time() - startTime > timeout:
215
212
  raise TimeoutError("QIS failed to launch within timelimit of " + str(timeout) + " sec.")
216
213
  pass
217
214
 
218
-
219
215
  if isQisRunningAndResponding(timeout=timeout):
220
- logDebug("QPS running and responding")
216
+ logDebug("QIS running and responding")
221
217
  else:
222
218
  logDebug("QIS running but not responding")
223
219
 
@@ -225,7 +221,7 @@ def startLocalQis(terminal=False, headless=False, args=None, timeout=20):
225
221
  os.chdir(current_dir)
226
222
 
227
223
 
228
- def reader(stream, q, source, lock,stop_flag):
224
+ def reader(stream, q, source, lock, stop_flag):
229
225
  '''
230
226
  Used to read output and place it in a queue for multithreaded reading
231
227
  :param stream:
@@ -261,7 +257,7 @@ def _get_std_msg_and_err_from_QIS_process(process):
261
257
  t2.start()
262
258
  counter = 0
263
259
  # check for stderr or stdmsg from the queue
264
- while counter <= 3: # If 3 empty reads from the queue then move on to see if QPS is running.
260
+ while counter <= 3: # If 3 empty reads from the queue then move on to see if QPS is running.
265
261
  try:
266
262
  source, line = q.get(timeout=1) # Wait for 1 second for new lines
267
263
  counter = 0
@@ -271,7 +267,7 @@ def _get_std_msg_and_err_from_QIS_process(process):
271
267
  printText(f"{source}: {line}")
272
268
  except Empty:
273
269
  counter += 1
274
- stop_flag.set() #Close the threads and return to the main loop where QPS is check to see if its started yet
270
+ stop_flag.set() #Close the threads and return to the main loop where QPS is check to see if its started yet
275
271
 
276
272
 
277
273
  def check_remote_qis(host='127.0.0.1', port=9722, timeout=0):
@@ -311,6 +307,7 @@ def check_remote_qis(host='127.0.0.1', port=9722, timeout=0):
311
307
  logging.debug("QIS is running")
312
308
  return True
313
309
 
310
+
314
311
  def checkAndCloseQis(host='127.0.0.1', port=9722):
315
312
  if isQisRunning() is True:
316
313
  closeQis()
@@ -329,53 +326,53 @@ def closeQis(host='127.0.0.1', port=9722):
329
326
  QIS connection port if set to a value other than the default
330
327
 
331
328
  """
332
-
329
+
333
330
  myQis = QisInterface(host, port)
334
- retVal=myQis.sendAndReceiveCmd(cmd = "$shutdown")
331
+ retVal = myQis.sendAndReceiveCmd(cmd="$shutdown")
335
332
  myQis.disconnect()
336
333
  time.sleep(1)
337
334
  return retVal
338
335
 
336
+
339
337
  #DEPRICATED
340
- def GetQisModuleSelection (QisConnection):
338
+ def GetQisModuleSelection(QisConnection):
341
339
  """
342
340
  Prints a list of modules for user selection
343
341
 
344
342
  .. deprecated:: 2.0.12
345
343
  Use the module selection functions of the QisInterface class instead
346
344
  """
347
-
345
+
348
346
  # Request a list of all USB and LAN accessible power modules
349
347
  devList = QisConnection.getDeviceList()
350
348
  # Removes rest devices
351
- devList = [ x for x in devList if "rest" not in x ]
349
+ devList = [x for x in devList if "rest" not in x]
352
350
 
353
351
  # Print the devices, so the user can choose one to connect to
354
- printText ("\n ########## STEP 1 - Select a Quarch Module. ########## \n")
355
- printText (' --------------------------------------------')
356
- printText (' | {:^5} | {:^30}|'.format("INDEX", "MODULE"))
357
- printText (' --------------------------------------------')
358
-
352
+ printText("\n ########## STEP 1 - Select a Quarch Module. ########## \n")
353
+ printText(' --------------------------------------------')
354
+ printText(' | {:^5} | {:^30}|'.format("INDEX", "MODULE"))
355
+ printText(' --------------------------------------------')
356
+
359
357
  try:
360
358
  for idx in xrange(len(devList)):
361
- printText (' | {:^5} | {:^30}|'.format(str(idx+1), devList[idx]))
359
+ printText(' | {:^5} | {:^30}|'.format(str(idx + 1), devList[idx]))
362
360
  printText(' --------------------------------------------')
363
361
  except:
364
362
  for idx in range(len(devList)):
365
- printText (' | {:^5} | {:^30}|'.format(str(idx+1), devList[idx]))
363
+ printText(' | {:^5} | {:^30}|'.format(str(idx + 1), devList[idx]))
366
364
  printText(' --------------------------------------------')
367
365
 
368
366
  # Get the user to select the device to control
369
367
  try:
370
- moduleId = int(raw_input ("\n>>> Enter the index of the Quarch module: "))
368
+ moduleId = int(raw_input("\n>>> Enter the index of the Quarch module: "))
371
369
  except NameError:
372
- moduleId = int(input ("\n>>> Enter the index of the Quarch module: "))
370
+ moduleId = int(input("\n>>> Enter the index of the Quarch module: "))
373
371
 
374
372
  # Verify the selection
375
373
  if (moduleId > 0 and moduleId <= len(devList)):
376
- myDeviceID = devList[moduleId-1]
374
+ myDeviceID = devList[moduleId - 1]
377
375
  else:
378
376
  myDeviceID = None
379
377
 
380
378
  return myDeviceID
381
-
quarchpy/qps/qpsFuncs.py CHANGED
@@ -1,11 +1,7 @@
1
1
  from threading import Thread, Lock, Event, active_count
2
2
  from queue import Queue, Empty
3
- import time
4
- import os, sys
5
- import datetime
6
3
  import platform
7
4
  from quarchpy.qis import isQisRunning, startLocalQis
8
- from quarchpy.connection_specific.connection_QIS import QisInterface
9
5
  from quarchpy.connection_specific.connection_QPS import QpsInterface
10
6
  from quarchpy.connection_specific.jdk_j21_jres.fix_permissions import main as fix_permissions, find_java_permissions
11
7
  from quarchpy.user_interface import *
@@ -87,6 +83,7 @@ def startLocalQps(keepQisRunning=False, args=[], timeout=30, startQPSMinimised=T
87
83
  java_path = os.path.dirname(os.path.abspath(__file__))
88
84
  java_path, junk = os.path.split(java_path)
89
85
  java_path = os.path.join(java_path, "connection_specific", "jdk_j21_jres")
86
+ java_path = "\"" + java_path
90
87
  # Start to build the path towards qps.jar
91
88
  qps_path = os.path.dirname(os.path.abspath(__file__))
92
89
  qps_path, junk = os.path.split(qps_path)
@@ -142,17 +139,17 @@ def startLocalQps(keepQisRunning=False, args=[], timeout=30, startQPSMinimised=T
142
139
 
143
140
  # OS dependency
144
141
  if current_os in "Windows":
145
- command = java_path + "\\win_amd64_jdk_21_jre\\bin\\java -jar qps.jar " + str(args)
142
+ command = java_path + "\\win_amd64_jdk_21_jre\\bin\\java\" -jar qps.jar " + str(args)
146
143
  elif current_os in "Linux" and current_arch == "x86_64":
147
- command = java_path + "/lin_amd64_jdk_21_jre/bin/java -jar qps.jar " + str(args)
144
+ command = java_path + "/lin_amd64_jdk_21_jre/bin/java\" -jar qps.jar " + str(args)
148
145
  elif current_os in "Linux" and current_arch == "aarch64":
149
- command = java_path + "/lin_arm64_jdk_21_jre/bin/java -jar qps.jar " + str(args)
146
+ command = java_path + "/lin_arm64_jdk_21_jre/bin/java\" -jar qps.jar " + str(args)
150
147
  elif current_os in "Darwin" and current_arch == "x86_64":
151
- command = java_path + "/mac_amd64_jdk_21_jre/bin/java -jar qps.jar " + str(args)
148
+ command = java_path + "/mac_amd64_jdk_21_jre/bin/java\" -jar qps.jar " + str(args)
152
149
  elif current_os in "Darwin" and current_arch == "arm64":
153
- command = java_path + "/mac_arm64_jdk_21_jre/bin/java -jar qps.jar " + str(args)
150
+ command = java_path + "/mac_arm64_jdk_21_jre/bin/java\" -jar qps.jar " + str(args)
154
151
  else: # default to windows
155
- command = java_path + "\\win_amd64_jdk_21_jre\\bin\\java -jar qps.jar " + str(args)
152
+ command = java_path + "\\win_amd64_jdk_21_jre\\bin\\java\" -jar qps.jar " + str(args)
156
153
 
157
154
  if "-logging=ON" in str(args): #If logging to a terminal window is on then os.system should be used to keep a window open to view logging.
158
155
  if current_os in "Windows":
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.1
2
2
  Name: quarchpy
3
- Version: 2.2.7.dev1
3
+ Version: 2.2.8.dev1
4
4
  Summary: This packpage offers Python support for Quarch Technology modules.
5
5
  Author: Quarch Technology ltd
6
6
  Author-email: support@quarch.com
@@ -17,18 +17,9 @@ Classifier: Topic :: Scientific/Engineering :: Information Analysis
17
17
  Classifier: Topic :: System
18
18
  Classifier: Topic :: System :: Power (UPS)
19
19
  Description-Content-Type: text/x-rst
20
- Requires-Dist: zeroconf>=0.23.0
20
+ Requires-Dist: zeroconf (>=0.23.0)
21
21
  Requires-Dist: numpy
22
22
  Requires-Dist: pandas
23
- Dynamic: author
24
- Dynamic: author-email
25
- Dynamic: classifier
26
- Dynamic: description
27
- Dynamic: description-content-type
28
- Dynamic: keywords
29
- Dynamic: license
30
- Dynamic: requires-dist
31
- Dynamic: summary
32
23
 
33
24
  ====================
34
25
  Changelog (Quarchpy)
@@ -46,6 +37,10 @@ Change Log
46
37
  ----------
47
38
 
48
39
 
40
+ 2.2.7
41
+ -----
42
+ - Bug fix for QIS 1.47 missing lib for linux only
43
+
49
44
  2.2.6
50
45
  -----
51
46
  - New QPS 1.45 and QIS 1.47