pychemstation 0.10.6__tar.gz → 0.10.7__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 (240) hide show
  1. {pychemstation-0.10.6 → pychemstation-0.10.7}/PKG-INFO +3 -3
  2. {pychemstation-0.10.6 → pychemstation-0.10.7}/README.md +1 -1
  3. {pychemstation-0.10.6 → pychemstation-0.10.7}/out.txt +134 -0
  4. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/control/README.md +1 -1
  5. {pychemstation-0.10.6/pychemstation/utils/mocking → pychemstation-0.10.7/pychemstation/control/controllers/abc_tables}/abc_comm.py +1 -6
  6. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/control/controllers/abc_tables/device.py +5 -0
  7. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/control/controllers/abc_tables/run.py +42 -14
  8. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/control/controllers/abc_tables/table.py +15 -6
  9. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/control/controllers/comm.py +26 -5
  10. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/control/controllers/data_aq/method.py +10 -13
  11. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/control/controllers/data_aq/sequence.py +118 -88
  12. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/control/controllers/devices/injector.py +4 -4
  13. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/control/hplc.py +38 -26
  14. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/utils/macro.py +11 -0
  15. pychemstation-0.10.7/pychemstation/utils/mocking/mock_comm.py +5 -0
  16. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/utils/sequence_types.py +3 -2
  17. {pychemstation-0.10.6 → pychemstation-0.10.7}/pyproject.toml +2 -2
  18. pychemstation-0.10.7/tests/cmd +1 -0
  19. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/constants.py +10 -6
  20. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/out.txt +4686 -0
  21. pychemstation-0.10.7/tests/reply +0 -0
  22. pychemstation-0.10.7/tests/test_abc.py +45 -0
  23. pychemstation-0.10.7/tests/test_comm.py +30 -0
  24. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/test_method.py +3 -6
  25. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/test_offline.py +29 -10
  26. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/test_sequence.py +28 -38
  27. {pychemstation-0.10.6 → pychemstation-0.10.7}/uv.lock +1 -1
  28. pychemstation-0.10.6/pychemstation/utils/mocking/mock_comm.py +0 -5
  29. {pychemstation-0.10.6 → pychemstation-0.10.7}/.gitignore +0 -0
  30. {pychemstation-0.10.6 → pychemstation-0.10.7}/.gitlab-ci.yml +0 -0
  31. {pychemstation-0.10.6 → pychemstation-0.10.7}/.pre-commit-config.yaml +0 -0
  32. {pychemstation-0.10.6 → pychemstation-0.10.7}/CHANGELOG.md +0 -0
  33. {pychemstation-0.10.6 → pychemstation-0.10.7}/CONTRIBUTING.md +0 -0
  34. {pychemstation-0.10.6 → pychemstation-0.10.7}/LICENSE +0 -0
  35. {pychemstation-0.10.6 → pychemstation-0.10.7}/doc/index.html +0 -0
  36. {pychemstation-0.10.6 → pychemstation-0.10.7}/doc/pychemstation/analysis/base_spectrum.html +0 -0
  37. {pychemstation-0.10.6 → pychemstation-0.10.7}/doc/pychemstation/analysis/spec_utils.html +0 -0
  38. {pychemstation-0.10.6 → pychemstation-0.10.7}/doc/pychemstation/analysis/utils.html +0 -0
  39. {pychemstation-0.10.6 → pychemstation-0.10.7}/doc/pychemstation/analysis.html +0 -0
  40. {pychemstation-0.10.6 → pychemstation-0.10.7}/doc/pychemstation/control/chromatogram.html +0 -0
  41. {pychemstation-0.10.6 → pychemstation-0.10.7}/doc/pychemstation/control/hplc.html +0 -0
  42. {pychemstation-0.10.6 → pychemstation-0.10.7}/doc/pychemstation/control.html +0 -0
  43. {pychemstation-0.10.6 → pychemstation-0.10.7}/doc/pychemstation/generated.html +0 -0
  44. {pychemstation-0.10.6 → pychemstation-0.10.7}/doc/pychemstation/utils/chemstation.html +0 -0
  45. {pychemstation-0.10.6 → pychemstation-0.10.7}/doc/pychemstation/utils/constants.html +0 -0
  46. {pychemstation-0.10.6 → pychemstation-0.10.7}/doc/pychemstation/utils/hplc_param_types.html +0 -0
  47. {pychemstation-0.10.6 → pychemstation-0.10.7}/doc/pychemstation/utils.html +0 -0
  48. {pychemstation-0.10.6 → pychemstation-0.10.7}/doc/pychemstation.html +0 -0
  49. {pychemstation-0.10.6 → pychemstation-0.10.7}/doc/search.js +0 -0
  50. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/__init__.py +0 -0
  51. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/analysis/__init__.py +0 -0
  52. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/analysis/base_spectrum.py +0 -0
  53. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/analysis/chromatogram.py +0 -0
  54. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/analysis/process_report.py +0 -0
  55. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/control/__init__.py +0 -0
  56. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/control/controllers/README.md +0 -0
  57. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/control/controllers/__init__.py +0 -0
  58. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/control/controllers/abc_tables/__init__.py +0 -0
  59. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/control/controllers/data_aq/__init__.py +0 -0
  60. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/control/controllers/devices/__init__.py +0 -0
  61. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/generated/__init__.py +0 -0
  62. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/generated/dad_method.py +0 -0
  63. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/generated/pump_method.py +0 -0
  64. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/utils/__init__.py +0 -0
  65. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/utils/injector_types.py +0 -0
  66. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/utils/method_types.py +0 -0
  67. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/utils/mocking/__init__.py +0 -0
  68. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/utils/mocking/mock_hplc.py +0 -0
  69. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/utils/num_utils.py +0 -0
  70. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/utils/parsing.py +0 -0
  71. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/utils/pump_types.py +0 -0
  72. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/utils/spec_utils.py +0 -0
  73. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/utils/table_types.py +0 -0
  74. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation/utils/tray_types.py +0 -0
  75. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation.egg-info/PKG-INFO +0 -0
  76. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation.egg-info/SOURCES.txt +0 -0
  77. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation.egg-info/dependency_links.txt +0 -0
  78. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation.egg-info/requires.txt +0 -0
  79. {pychemstation-0.10.6 → pychemstation-0.10.7}/pychemstation.egg-info/top_level.txt +0 -0
  80. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/0_2025-03-15 19-14-35.PDF +0 -0
  81. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/ACQRES.REG +0 -0
  82. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/CSlbk.ini +0 -0
  83. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/DA.M/DAMETHOD.REG +0 -0
  84. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/DA.M/INFO.MTH +0 -0
  85. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/DA.M/RECALIB.MTH +0 -0
  86. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/DA.M/rpthead.txt +0 -0
  87. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/DAD1.UV +0 -0
  88. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/DAD1A.ch +0 -0
  89. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/DAD1A.npz +0 -0
  90. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/DAD1B.ch +0 -0
  91. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/DAD1B.npz +0 -0
  92. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/DAD1C.ch +0 -0
  93. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/DAD1C.npz +0 -0
  94. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/DAD1D.ch +0 -0
  95. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/DAD1D.npz +0 -0
  96. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/DAD1E.ch +0 -0
  97. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/DAD1E.npz +0 -0
  98. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/DiagResults.REG +0 -0
  99. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/PMP1.AnalyticalResults.drvml +0 -0
  100. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/REPORT01.CSV +0 -0
  101. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/REPORT02.CSV +0 -0
  102. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/REPORT03.CSV +0 -0
  103. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/REPORT04.CSV +0 -0
  104. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/REPORT05.CSV +0 -0
  105. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/RUN.LOG +0 -0
  106. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/Report.TXT +0 -0
  107. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/Report00.CSV +0 -0
  108. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/Report01.xls +0 -0
  109. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/SAMPLE.XML +0 -0
  110. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/SAMPLE.XML.bak +0 -0
  111. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/WLS1.Sampler.scml +0 -0
  112. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/acq.macaml +0 -0
  113. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/acq.txt +0 -0
  114. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/acq_MethHist.txt +0 -0
  115. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/acq_damethod.reg +0 -0
  116. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/da.macaml +0 -0
  117. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/lcdiag.reg +0 -0
  118. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/sample.acaml +0 -0
  119. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/0_2025-03-15 19-14-35.D/single.B +0 -0
  120. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/ACQRES.REG +0 -0
  121. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/AUTOMATICALLY_GENERATED_REPORT01.CSV +0 -0
  122. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/AUTOMATICALLY_GENERATED_REPORT02.CSV +0 -0
  123. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/AUTOMATICALLY_GENERATED_REPORT03.CSV +0 -0
  124. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/AUTOMATICALLY_GENERATED_REPORT04.CSV +0 -0
  125. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/AUTOMATICALLY_GENERATED_REPORT05.CSV +0 -0
  126. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/Automatically_Generated_Report.TXT +0 -0
  127. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/Automatically_Generated_Report00.CSV +0 -0
  128. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/CSlbk.ini +0 -0
  129. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DA.M/DAMETHOD.REG +0 -0
  130. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DA.M/INFO.MTH +0 -0
  131. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DA.M/RECALIB.MTH +0 -0
  132. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DA.M/rpthead.txt +0 -0
  133. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1.UV +0 -0
  134. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1A.ch +0 -0
  135. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1A.npz +0 -0
  136. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1B.ch +0 -0
  137. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1B.npz +0 -0
  138. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1C.ch +0 -0
  139. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1C.npz +0 -0
  140. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1D.ch +0 -0
  141. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1D.npz +0 -0
  142. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1E.ch +0 -0
  143. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1E.npz +0 -0
  144. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1F.ch +0 -0
  145. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1F.npz +0 -0
  146. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1G.ch +0 -0
  147. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1G.npz +0 -0
  148. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1H.ch +0 -0
  149. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1H.npz +0 -0
  150. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DiagResults.REG +0 -0
  151. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/Limsinf.xml +0 -0
  152. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/PMP1.AnalyticalResults.drvml +0 -0
  153. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/RUN.LOG +0 -0
  154. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/SAMPLE.XML +0 -0
  155. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/SAMPLE.XML.bak +0 -0
  156. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/WLS1.Sampler.scml +0 -0
  157. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/acq.macaml +0 -0
  158. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/acq.txt +0 -0
  159. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/acq_MethHist.txt +0 -0
  160. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/acq_damethod.reg +0 -0
  161. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/da.macaml +0 -0
  162. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/lcdiag.reg +0 -0
  163. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/sample.acaml +0 -0
  164. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/single.B +0 -0
  165. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/__init__.py +0 -0
  166. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_talk.mac +0 -0
  167. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/CSlbk.ini +0 -0
  168. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/ACQ.MS +0 -0
  169. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/Agilent1200erDadDriver1.RapidControl.ConfigXML.xml +0 -0
  170. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/Agilent1200erDadDriver1.RapidControl.MethodMetaData.xml +0 -0
  171. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/Agilent1200erDadDriver1.RapidControl.MethodXML.xml +0 -0
  172. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentColumnCompDriver1.RapidControl.ConfigXML.xml +0 -0
  173. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentColumnCompDriver1.RapidControl.MethodMetaData.xml +0 -0
  174. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentColumnCompDriver1.RapidControl.MethodXML.xml +0 -0
  175. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentPumpDriver1.RapidControl.ConfigXML.xml +0 -0
  176. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentPumpDriver1.RapidControl.MethodMetaData.xml +0 -0
  177. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentPumpDriver1.RapidControl.MethodXML.xml +0 -0
  178. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentSamplerDriver1.RapidControl.ConfigXML.xml +0 -0
  179. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentSamplerDriver1.RapidControl.MethodMetaData.xml +0 -0
  180. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentSamplerDriver1.RapidControl.MethodXML.xml +0 -0
  181. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentSamplerDriver1.RapidControl.PretreatXML.xml +0 -0
  182. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/DAMETHOD.REG +0 -0
  183. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/FIA.REG +0 -0
  184. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/INFO.MTH +0 -0
  185. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/INJECTOR.MTH +0 -0
  186. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/MassHunterIntegration.ini +0 -0
  187. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/RECALIB.MTH +0 -0
  188. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/RapidControl.InstrumentConfig.xml +0 -0
  189. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/rpthead.txt +0 -0
  190. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/smpl_pur.mth +0 -0
  191. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/Methods.Reg +0 -0
  192. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/hplc_testing.B +0 -0
  193. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/hplc_testing.LOG +0 -0
  194. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/hplc_testing.S +0 -0
  195. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/hplc_testing.Start +0 -0
  196. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/ACQRES.REG +0 -0
  197. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/CSlbk.ini +0 -0
  198. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DA.M/DAMETHOD.REG +0 -0
  199. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DA.M/INFO.MTH +0 -0
  200. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DA.M/RECALIB.MTH +0 -0
  201. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DA.M/rpthead.txt +0 -0
  202. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1.UV +0 -0
  203. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1A.ch +0 -0
  204. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1A.npz +0 -0
  205. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1B.ch +0 -0
  206. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1B.npz +0 -0
  207. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1C.ch +0 -0
  208. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1C.npz +0 -0
  209. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1D.ch +0 -0
  210. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1D.npz +0 -0
  211. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1E.ch +0 -0
  212. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1E.npz +0 -0
  213. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DiagResults.REG +0 -0
  214. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/Limsinf.xml +0 -0
  215. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/PMP1.AnalyticalResults.drvml +0 -0
  216. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/REPORT01.CSV +0 -0
  217. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/REPORT02.CSV +0 -0
  218. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/REPORT03.CSV +0 -0
  219. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/REPORT04.CSV +0 -0
  220. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/REPORT05.CSV +0 -0
  221. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/RUN.LOG +0 -0
  222. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/Report.TXT +0 -0
  223. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/Report00.CSV +0 -0
  224. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/Report01.xls +0 -0
  225. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/SAMPLE.XML +0 -0
  226. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/SAMPLE.XML.bak +0 -0
  227. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/WLS1.Sampler.scml +0 -0
  228. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/acq.macaml +0 -0
  229. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/acq.txt +0 -0
  230. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/acq_MethHist.txt +0 -0
  231. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/acq_damethod.reg +0 -0
  232. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/da.macaml +0 -0
  233. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/hplc_testing 2025-03-27 17-13-47_run seq with new method.PDF +0 -0
  234. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/lcdiag.reg +0 -0
  235. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/sequence.acam_ +0 -0
  236. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/hplc_testing 2025-03-27 17-13-47/sequence.acaml +0 -0
  237. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/test_injector.py +0 -0
  238. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/test_integration.py +0 -0
  239. {pychemstation-0.10.6 → pychemstation-0.10.7}/tests/test_online.py +0 -0
  240. {pychemstation-0.10.6 → pychemstation-0.10.7}/update-lib.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pychemstation
3
- Version: 0.10.6
3
+ Version: 0.10.7
4
4
  Summary: Library to interact with Chemstation software, primarily used in Hein lab
5
5
  Project-URL: Documentation, https://pychemstation-e5a086.gitlab.io/pychemstation.html
6
6
  Project-URL: Repository, https://gitlab.com/heingroup/device-api/pychemstation
@@ -18,7 +18,7 @@ Requires-Dist: matplotlib>=3.7.5
18
18
  Requires-Dist: pandas>=2.0.3
19
19
  Requires-Dist: pdoc>=14.7.0
20
20
  Requires-Dist: polling>=0.3.2
21
- Requires-Dist: pre-commit>=4.2.0
21
+ Requires-Dist: pre-commit>=3.5.0
22
22
  Requires-Dist: pytest>=7.3.5
23
23
  Requires-Dist: rainbow-api>=1.0.10
24
24
  Requires-Dist: result>=0.17.0
@@ -90,7 +90,7 @@ DATA_DIR_2 = "C:\\Users\\Public\\Documents\\ChemStation\\2\\Data"
90
90
  DATA_DIR_3 = "C:\\Users\\Public\\Documents\\ChemStation\\3\\Data"
91
91
 
92
92
  # Initialize HPLC Controller
93
- hplc_controller = HPLCController(data_dirs=[DATA_DIR_2, DATA_DIR_3],
93
+ hplc_controller = HPLCController(extra_data_dirs=[DATA_DIR_2, DATA_DIR_3],
94
94
  comm_dir=DEFAULT_COMMAND_PATH,
95
95
  method_dir=DEFAULT_METHOD_DIR,
96
96
  sequence_dir=SEQUENCE_DIR)
@@ -59,7 +59,7 @@ DATA_DIR_2 = "C:\\Users\\Public\\Documents\\ChemStation\\2\\Data"
59
59
  DATA_DIR_3 = "C:\\Users\\Public\\Documents\\ChemStation\\3\\Data"
60
60
 
61
61
  # Initialize HPLC Controller
62
- hplc_controller = HPLCController(data_dirs=[DATA_DIR_2, DATA_DIR_3],
62
+ hplc_controller = HPLCController(extra_data_dirs=[DATA_DIR_2, DATA_DIR_3],
63
63
  comm_dir=DEFAULT_COMMAND_PATH,
64
64
  method_dir=DEFAULT_METHOD_DIR,
65
65
  sequence_dir=SEQUENCE_DIR)
@@ -375,3 +375,137 @@ LoadMethod "D:\Chemstation\1\Methods\", "GENERAL-POROSHELL-OPT.M"
375
375
  response$ = _MethFile$
376
376
  Rows = TabHdrVal(RCPMP1Method[1], "Timetable", "NumberOfRows")
377
377
  response_num = TabHdrVal(RCPMP1Method[1], "Timetable", "NumberOfRows")
378
+ response$ = AcqStatus$
379
+ Local Rows
380
+ SaveMethod _MethPath$, _MethFile$, "method saved by pychemstation"
381
+ SaveSequence _SeqPath$, _SeqFile$
382
+ LIDoOperation "TURN_ON"
383
+ PrepRun
384
+ _SeqFile$ = "hplc_testing.S"
385
+ _SeqPath$ = "C:\1\Sequence\"
386
+ LoadSequence _SeqPath$, _SeqFile$
387
+ response$ = _SeqFile$
388
+ Rows = TabHdrVal(_sequence[1], "SeqTable1", "NumberOfRows")
389
+ response_num = TabHdrVal(_sequence[1], "SeqTable1", "NumberOfRows")
390
+ Sleep 0.1
391
+ Print Rows
392
+ response$ = _SeqFile$
393
+ response$ = TabText$("_sequence[1]", "SeqTable1", 1, "SampleName")
394
+ response_num = TabVal("_sequence[1]", "SeqTable1", 1, "Vial")
395
+ response$ = TabText$("_sequence[1]", "SeqTable1", 1, "Method")
396
+ response_num = TabVal("_sequence[1]", "SeqTable1", 1, "InjVial")
397
+ response$ = TabText$("_sequence[1]", "SeqTable1", 1, "InjVolume")
398
+ response$ = TabText$("_sequence[1]", "SeqTable1", 1, "InjectionSource")
399
+ response_num = TabVal("_sequence[1]", "SeqTable1", 1, "SampleType")
400
+ Rows = TabHdrVal(_sequence[1], "SeqTable1", "NumberOfRows")
401
+ response_num = TabHdrVal(_sequence[1], "SeqTable1", "NumberOfRows")
402
+ Sleep 0.1
403
+ Print Rows
404
+ response$ = _SeqFile$
405
+ response$ = TabText$("_sequence[1]", "SeqTable1", 1, "SampleName")
406
+ response_num = TabVal("_sequence[1]", "SeqTable1", 1, "Vial")
407
+ response$ = TabText$("_sequence[1]", "SeqTable1", 1, "Method")
408
+ response_num = TabVal("_sequence[1]", "SeqTable1", 1, "InjVial")
409
+ response$ = TabText$("_sequence[1]", "SeqTable1", 1, "InjVolume")
410
+ response$ = TabText$("_sequence[1]", "SeqTable1", 1, "InjectionSource")
411
+ response_num = TabVal("_sequence[1]", "SeqTable1", 1, "SampleType")
412
+ response$ = AcqStatus$
413
+ Local Rows
414
+ SaveMethod _MethPath$, _MethFile$, "method saved by pychemstation"
415
+ SaveSequence _SeqPath$, _SeqFile$
416
+ LIDoOperation "TURN_ON"
417
+ PrepRun
418
+ _SeqFile$ = "hplc_testing.S"
419
+ _SeqPath$ = "C:\1\Sequence\"
420
+ LoadSequence _SeqPath$, _SeqFile$
421
+ response$ = _SeqFile$
422
+ Rows = TabHdrVal(_sequence[1], "SeqTable1", "NumberOfRows")
423
+ response_num = TabHdrVal(_sequence[1], "SeqTable1", "NumberOfRows")
424
+ Sleep 0.1
425
+ Print Rows
426
+ response$ = _SeqFile$
427
+ response$ = TabText$("_sequence[1]", "SeqTable1", 1, "SampleName")
428
+ response_num = TabVal("_sequence[1]", "SeqTable1", 1, "Vial")
429
+ response$ = TabText$("_sequence[1]", "SeqTable1", 1, "Method")
430
+ response_num = TabVal("_sequence[1]", "SeqTable1", 1, "InjVial")
431
+ response$ = TabText$("_sequence[1]", "SeqTable1", 1, "InjVolume")
432
+ response$ = TabText$("_sequence[1]", "SeqTable1", 1, "InjectionSource")
433
+ response_num = TabVal("_sequence[1]", "SeqTable1", 1, "SampleType")
434
+ PrepRun
435
+ SaveMethod _MethPath$, _MethFile$, "{commit_msg}"
436
+ SaveSequence _SeqPath$, _SeqFile$
437
+ response_num = ObjHdrVal("RCPMP1Method[1]", "PostTime_Time")
438
+ response_num = ObjHdrVal("RCPMP1Method[1]", "StopTime_Time")
439
+ response$ = _MethFile$
440
+ RunSequence
441
+ response$ = AcqStatus$
442
+ response$ = AcqStatus$
443
+ response$ = AcqStatus$
444
+ response$ = AcqStatus$
445
+ response$ = AcqStatus$
446
+ response$ = AcqStatus$
447
+ response$ = AcqStatus$
448
+ response$ = AcqStatus$
449
+ response$ = AcqStatus$
450
+ response$ = AcqStatus$
451
+ response$ = AcqStatus$
452
+ response$ = AcqStatus$
453
+ response$ = AcqStatus$
454
+ response$ = AcqStatus$
455
+ response$ = AcqStatus$
456
+ response$ = AcqStatus$
457
+ response$ = AcqStatus$
458
+ response$ = AcqStatus$
459
+ response$ = AcqStatus$
460
+ response$ = AcqStatus$
461
+ response$ = AcqStatus$
462
+ response$ = AcqStatus$
463
+ Local Rows
464
+ SaveMethod _MethPath$, _MethFile$, "method saved by pychemstation"
465
+ SaveSequence _SeqPath$, _SeqFile$
466
+ LIDoOperation "TURN_ON"
467
+ PrepRun
468
+ _SeqFile$ = "hplc_testing.S"
469
+ _SeqPath$ = "C:\1\Sequence\"
470
+ LoadSequence _SeqPath$, _SeqFile$
471
+ response$ = _SeqFile$
472
+ Rows = TabHdrVal(_sequence[1], "SeqTable1", "NumberOfRows")
473
+ response_num = TabHdrVal(_sequence[1], "SeqTable1", "NumberOfRows")
474
+ Sleep 0.1
475
+ Print Rows
476
+ response$ = _SeqFile$
477
+ response$ = TabText$("_sequence[1]", "SeqTable1", 1, "SampleName")
478
+ response_num = TabVal("_sequence[1]", "SeqTable1", 1, "Vial")
479
+ response$ = TabText$("_sequence[1]", "SeqTable1", 1, "Method")
480
+ response_num = TabVal("_sequence[1]", "SeqTable1", 1, "InjVial")
481
+ response$ = TabText$("_sequence[1]", "SeqTable1", 1, "InjVolume")
482
+ response$ = TabText$("_sequence[1]", "SeqTable1", 1, "InjectionSource")
483
+ response_num = TabVal("_sequence[1]", "SeqTable1", 1, "SampleType")
484
+ PrepRun
485
+ SaveMethod _MethPath$, _MethFile$, "{commit_msg}"
486
+ SaveSequence _SeqPath$, _SeqFile$
487
+ response_num = ObjHdrVal("RCPMP1Method[1]", "PostTime_Time")
488
+ response_num = ObjHdrVal("RCPMP1Method[1]", "StopTime_Time")
489
+ response$ = _MethFile$
490
+ RunSequence
491
+ response$ = AcqStatus$
492
+ response$ = AcqStatus$
493
+ response$ = AcqStatus$
494
+ response$ = AcqStatus$
495
+ response$ = AcqStatus$
496
+ response$ = AcqStatus$
497
+ response$ = AcqStatus$
498
+ response$ = AcqStatus$
499
+ response$ = AcqStatus$
500
+ response$ = AcqStatus$
501
+ response$ = AcqStatus$
502
+ response$ = AcqStatus$
503
+ response$ = AcqStatus$
504
+ response$ = AcqStatus$
505
+ response$ = AcqStatus$
506
+ response$ = AcqStatus$
507
+ response$ = AcqStatus$
508
+ response$ = AcqStatus$
509
+ response$ = AcqStatus$
510
+ response$ = AcqStatus$
511
+ response$ = AcqStatus$
@@ -10,7 +10,7 @@ DATA_DIR_2 = "C:\\Users\\Public\\Documents\\ChemStation\\2\\Data"
10
10
  DATA_DIR_3 = "C:\\Users\\Public\\Documents\\ChemStation\\3\\Data"
11
11
 
12
12
  # Initialize HPLC Controller
13
- hplc_controller = HPLCController(data_dirs=[DATA_DIR_2, DATA_DIR_3],
13
+ hplc_controller = HPLCController(extra_data_dirs=[DATA_DIR_2, DATA_DIR_3],
14
14
  comm_dir=DEFAULT_COMMAND_PATH,
15
15
  method_dir=DEFAULT_METHOD_DIR,
16
16
  sequence_dir=SEQUENCE_DIR)
@@ -18,12 +18,7 @@ from typing import Union
18
18
 
19
19
  from result import Err, Ok, Result
20
20
 
21
- from ...utils.macro import (
22
- HPLCAvailStatus,
23
- Command,
24
- Status,
25
- Response,
26
- )
21
+ from ....utils.macro import Status, HPLCAvailStatus, Command, Response
27
22
 
28
23
 
29
24
  class ABCCommunicationController(abc.ABC):
@@ -13,3 +13,8 @@ class DeviceController(ABCTableController, ABC):
13
13
  ):
14
14
  super().__init__(controller=controller, table=table)
15
15
  self.offline = offline
16
+
17
+ def __new__(cls, *args, **kwargs):
18
+ if cls is ABCTableController:
19
+ raise TypeError(f"only children of '{cls.__name__}' may be instantiated")
20
+ return object.__new__(cls)
@@ -11,13 +11,17 @@ import math
11
11
  import os
12
12
  import time
13
13
  import warnings
14
- from typing import Dict, List, Optional, Tuple, Union
14
+ from typing import Dict, List, Optional, Tuple, Union, Set
15
15
 
16
16
  import polling
17
17
  import rainbow as rb
18
- from result import Err, Result, Ok
18
+ from result import Err, Ok, Result
19
+
20
+ from pychemstation.analysis.chromatogram import (
21
+ AgilentChannelChromatogramData,
22
+ AgilentHPLCChromatogram,
23
+ )
19
24
 
20
- from .table import ABCTableController
21
25
  from ....analysis.process_report import (
22
26
  AgilentReport,
23
27
  CSVProcessor,
@@ -25,14 +29,11 @@ from ....analysis.process_report import (
25
29
  TXTProcessor,
26
30
  )
27
31
  from ....control.controllers.comm import CommunicationController
28
- from pychemstation.analysis.chromatogram import (
29
- AgilentChannelChromatogramData,
30
- AgilentHPLCChromatogram,
31
- )
32
- from ....utils.macro import HPLCRunningStatus
32
+ from ....utils.macro import Command, HPLCRunningStatus
33
33
  from ....utils.method_types import MethodDetails
34
34
  from ....utils.sequence_types import SequenceTable
35
- from ....utils.table_types import Table, T
35
+ from ....utils.table_types import T, Table
36
+ from .table import ABCTableController
36
37
 
37
38
  TableType = Union[MethodDetails, SequenceTable]
38
39
 
@@ -47,12 +48,10 @@ class RunController(ABCTableController, abc.ABC):
47
48
  offline: bool = False,
48
49
  ):
49
50
  super().__init__(controller=controller, table=table)
50
- warnings.warn(
51
- "This abstract class is not meant to be initialized. Use MethodController or SequenceController."
52
- )
53
51
  self.table_state: Optional[TableType] = None
54
52
  self.curr_run_starting_time: Optional[float] = None
55
53
  self.timeout: Optional[float] = None
54
+ self.current_run_child_files: Set[str] = set()
56
55
 
57
56
  if not offline:
58
57
  if src and not os.path.isdir(src):
@@ -79,8 +78,15 @@ class RunController(ABCTableController, abc.ABC):
79
78
  self.uv: Dict[int, AgilentHPLCChromatogram] = {}
80
79
  self.data_files: List = []
81
80
 
81
+ def __new__(cls, *args, **kwargs):
82
+ if cls is RunController:
83
+ raise TypeError(f"only children of '{cls.__name__}' may be instantiated")
84
+ return object.__new__(cls)
85
+
82
86
  @abc.abstractmethod
83
- def fuzzy_match_most_recent_folder(self, most_recent_folder: T) -> Result[T, str]:
87
+ def fuzzy_match_most_recent_folder(
88
+ self, most_recent_folder: T, child_files: Set[str]
89
+ ) -> Result[T, str]:
84
90
  pass
85
91
 
86
92
  @abc.abstractmethod
@@ -120,6 +126,12 @@ class RunController(ABCTableController, abc.ABC):
120
126
 
121
127
  def check_hplc_run_finished(self) -> Tuple[float, bool]:
122
128
  if self.controller:
129
+ try:
130
+ _, current_run_file = self.get_current_run_data_dir_file()
131
+ sample_file, extension, _ = current_run_file.partition(".D")
132
+ self.current_run_child_files.add(sample_file)
133
+ except Exception:
134
+ pass
123
135
  done_running = self.controller.check_if_not_running()
124
136
  if self.curr_run_starting_time and self.timeout:
125
137
  time_passed = time.time() - self.curr_run_starting_time
@@ -141,6 +153,7 @@ class RunController(ABCTableController, abc.ABC):
141
153
 
142
154
  :return: Data file object containing most recent run file information.
143
155
  """
156
+ self.current_run_child_files = set()
144
157
  if self.timeout is not None:
145
158
  finished_run = False
146
159
  minutes = math.ceil(self.timeout / 60)
@@ -170,7 +183,9 @@ class RunController(ABCTableController, abc.ABC):
170
183
  else:
171
184
  raise ValueError("Timeout value is None, no comparison can be made.")
172
185
 
173
- check_folder = self.fuzzy_match_most_recent_folder(self.data_files[-1])
186
+ check_folder = self.fuzzy_match_most_recent_folder(
187
+ self.data_files[-1], self.current_run_child_files
188
+ )
174
189
  if check_folder.is_ok() and finished_run:
175
190
  return check_folder
176
191
  elif check_folder.is_ok():
@@ -226,3 +241,16 @@ class RunController(ABCTableController, abc.ABC):
226
241
  def _reset_time(self):
227
242
  self.curr_run_starting_time = None
228
243
  self.timeout = None
244
+
245
+ def get_current_run_data_dir_file(self) -> Tuple[str, str]:
246
+ self.send(Command.GET_CURRENT_RUN_DATA_DIR)
247
+ full_path_name = self.receive()
248
+ self.send(Command.GET_CURRENT_RUN_DATA_FILE)
249
+ current_sample_file = self.receive()
250
+ if full_path_name.is_ok() and current_sample_file.is_ok():
251
+ return (
252
+ full_path_name.ok_value.string_response,
253
+ current_sample_file.ok_value.string_response,
254
+ )
255
+ else:
256
+ raise ValueError("Couldn't read data dir and file.")
@@ -7,7 +7,6 @@ Authors: Lucy Hao
7
7
  from __future__ import annotations
8
8
 
9
9
  import abc
10
- import warnings
11
10
  from typing import Optional, Union
12
11
 
13
12
  from result import Err, Result
@@ -27,13 +26,15 @@ class ABCTableController(abc.ABC):
27
26
  controller: Optional[CommunicationController],
28
27
  table: Table,
29
28
  ):
30
- warnings.warn(
31
- "This abstract class is not meant to be initialized. Use MethodController or SequenceController."
32
- )
33
29
  self.controller = controller
34
30
  self.table_locator = table
35
31
  self.table_state: Optional[TableType] = None
36
32
 
33
+ def __new__(cls, *args, **kwargs):
34
+ if cls is ABCTableController:
35
+ raise TypeError(f"only children of '{cls.__name__}' may be instantiated")
36
+ return object.__new__(cls, *args, **kwargs)
37
+
37
38
  def receive(self) -> Result[Response, str]:
38
39
  if self.controller:
39
40
  for _ in range(10):
@@ -93,6 +94,8 @@ class ABCTableController(abc.ABC):
93
94
  raise ValueError("Controller is offline")
94
95
 
95
96
  def add_new_col_num(self, col_name: RegisterFlag, val: Union[int, float]):
97
+ if not (isinstance(val, int) or isinstance(val, float)):
98
+ raise ValueError(f"{val} must be an int or float.")
96
99
  self.sleepy_send(
97
100
  TableOperation.NEW_COL_VAL.value.format(
98
101
  register=self.table_locator.register,
@@ -103,6 +106,8 @@ class ABCTableController(abc.ABC):
103
106
  )
104
107
 
105
108
  def add_new_col_text(self, col_name: RegisterFlag, val: str):
109
+ if not isinstance(val, str):
110
+ raise ValueError(f"{val} must be a str.")
106
111
  self.sleepy_send(
107
112
  TableOperation.NEW_COL_TEXT.value.format(
108
113
  register=self.table_locator.register,
@@ -115,10 +120,12 @@ class ABCTableController(abc.ABC):
115
120
  def _edit_row_num(
116
121
  self, col_name: RegisterFlag, val: Union[int, float], row: Optional[int] = None
117
122
  ):
123
+ if not (isinstance(val, int) or isinstance(val, float)):
124
+ raise ValueError(f"{val} must be an int or float.")
118
125
  if row:
119
126
  num_rows = self.get_num_rows()
120
127
  if num_rows.is_ok():
121
- if num_rows.value.num_response < row:
128
+ if num_rows.ok_value.num_response < row:
122
129
  raise ValueError("Not enough rows to edit!")
123
130
 
124
131
  self.sleepy_send(
@@ -134,10 +141,12 @@ class ABCTableController(abc.ABC):
134
141
  def _edit_row_text(
135
142
  self, col_name: RegisterFlag, val: str, row: Optional[int] = None
136
143
  ):
144
+ if not isinstance(val, str):
145
+ raise ValueError(f"{val} must be a str.")
137
146
  if row:
138
147
  num_rows = self.get_num_rows()
139
148
  if num_rows.is_ok():
140
- if num_rows.value.num_response < row:
149
+ if num_rows.ok_value.num_response < row:
141
150
  raise ValueError("Not enough rows to edit!")
142
151
 
143
152
  self.sleepy_send(
@@ -11,17 +11,17 @@ Authors: Alexander Hammer, Hessam Mehr, Lucy Hao
11
11
  """
12
12
 
13
13
  import time
14
- from typing import Optional, Union
14
+ from typing import Optional, Union, Tuple, List
15
15
 
16
16
  from result import Err, Ok, Result
17
17
 
18
18
  from ...utils.macro import (
19
- str_to_status,
20
- HPLCErrorStatus,
21
19
  Command,
20
+ HPLCErrorStatus,
22
21
  Status,
22
+ str_to_status,
23
23
  )
24
- from ...utils.mocking.abc_comm import ABCCommunicationController
24
+ from .abc_tables.abc_comm import ABCCommunicationController
25
25
 
26
26
 
27
27
  class CommunicationController(ABCCommunicationController):
@@ -76,7 +76,7 @@ class CommunicationController(ABCCommunicationController):
76
76
  if res.is_err():
77
77
  return HPLCErrorStatus.NORESPONSE
78
78
  if res.is_ok():
79
- parsed_response = self.receive().value.string_response
79
+ parsed_response = self.receive().ok_value.string_response
80
80
  self._most_recent_hplc_status = str_to_status(parsed_response)
81
81
  return self._most_recent_hplc_status
82
82
  else:
@@ -148,3 +148,24 @@ class CommunicationController(ABCCommunicationController):
148
148
  return Err(
149
149
  f"Failed to receive reply to command #{cmd_no} due to {err} caused by {err_msg}."
150
150
  )
151
+
152
+ def get_chemstation_dirs(self) -> Tuple[str, str, List[str]]:
153
+ method_dir, sequence_dir, data_dirs = None, None, None
154
+ self.send(Command.GET_METHOD_DIR)
155
+ res = self.receive()
156
+ if res.is_ok():
157
+ method_dir = res.ok_value.string_response
158
+ self.send(Command.GET_SEQUENCE_DIR)
159
+ res = self.receive()
160
+ if res.is_ok():
161
+ sequence_dir = res.ok_value.string_response
162
+ self.send(Command.GET_DATA_DIRS)
163
+ res = self.receive()
164
+ if res.is_ok():
165
+ data_dirs = res.ok().string_response.split("|")
166
+ if method_dir and sequence_dir and data_dirs:
167
+ return method_dir, sequence_dir, data_dirs
168
+ else:
169
+ raise ValueError(
170
+ "Please provide the method, sequence and data directories, could not be found."
171
+ )
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import os
4
4
  import time
5
5
  import warnings
6
- from typing import List, Optional, Union, Dict
6
+ from typing import List, Optional, Union, Dict, Set
7
7
 
8
8
  from result import Err, Ok, Result
9
9
 
@@ -413,8 +413,6 @@ class MethodController(RunController):
413
413
  :param stall_while_running: whether to stall or immediately return
414
414
  :param add_timestamp: if should add timestamp to experiment name
415
415
  """
416
-
417
- folder_name = ""
418
416
  hplc_is_running = False
419
417
  tries = 0
420
418
  while tries < 10 and not hplc_is_running:
@@ -427,18 +425,15 @@ class MethodController(RunController):
427
425
  else experiment_name,
428
426
  )
429
427
  )
430
- folder_name = (
431
- f"{experiment_name}_{timestamp}.D"
432
- if add_timestamp
433
- else f"{experiment_name}.D"
434
- )
428
+
435
429
  hplc_is_running = self.check_hplc_is_running()
436
430
  tries += 1
437
431
 
432
+ data_dir, data_file = self.get_current_run_data_dir_file()
438
433
  if not hplc_is_running:
439
434
  raise RuntimeError("Method failed to start.")
440
435
 
441
- self.data_files.append(os.path.join(self.data_dirs[0], folder_name))
436
+ self.data_files.append(os.path.join(os.path.normpath(data_dir), data_file))
442
437
  self.timeout = (self.get_total_runtime()) * 60
443
438
 
444
439
  if stall_while_running:
@@ -446,18 +441,20 @@ class MethodController(RunController):
446
441
  if run_completed.is_ok():
447
442
  self.data_files[-1] = run_completed.ok_value
448
443
  else:
449
- raise RuntimeError("Run error has occurred.")
444
+ raise RuntimeError(f"Run error has occurred:{run_completed.err_value}.")
450
445
  else:
451
- folder = self.fuzzy_match_most_recent_folder(self.data_files[-1])
446
+ folder = self.fuzzy_match_most_recent_folder(self.data_files[-1], None)
452
447
  while folder.is_err():
453
- folder = self.fuzzy_match_most_recent_folder(self.data_files[-1])
448
+ folder = self.fuzzy_match_most_recent_folder(self.data_files[-1], None)
454
449
  if folder.is_ok():
455
450
  self.data_files[-1] = folder.ok_value
456
451
  else:
457
452
  warning = f"Data folder {self.data_files[-1]} may not exist, returning and will check again after run is done."
458
453
  warnings.warn(warning)
459
454
 
460
- def fuzzy_match_most_recent_folder(self, most_recent_folder: T) -> Result[str, str]:
455
+ def fuzzy_match_most_recent_folder(
456
+ self, most_recent_folder: T, child_dirs: Optional[Set[str]]
457
+ ) -> Result[str, str]:
461
458
  if isinstance(most_recent_folder, str) or isinstance(most_recent_folder, bytes):
462
459
  if os.path.exists(most_recent_folder):
463
460
  return Ok(most_recent_folder)