pychemstation 0.10.8.dev2__tar.gz → 0.10.9__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 (375) hide show
  1. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/PKG-INFO +17 -12
  2. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/README.md +16 -11
  3. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/analysis/process_report.py +3 -1
  4. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/control/controllers/data_aq/method.py +224 -70
  5. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/control/controllers/data_aq/sequence.py +95 -67
  6. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/control/hplc.py +29 -2
  7. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/utils/abc_tables/abc_comm.py +7 -3
  8. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/utils/abc_tables/run.py +13 -12
  9. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/utils/abc_tables/table.py +18 -13
  10. pychemstation-0.10.9/pychemstation/utils/device_types.py +7 -0
  11. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/utils/macro.py +5 -2
  12. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/utils/method_types.py +1 -1
  13. pychemstation-0.10.9/pychemstation/utils/mocking/mock_comm.py +28 -0
  14. pychemstation-0.10.9/pychemstation/utils/mocking/mock_hplc.py +30 -0
  15. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/utils/sequence_types.py +0 -2
  16. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/utils/table_types.py +2 -0
  17. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pyproject.toml +1 -1
  18. pychemstation-0.10.9/tests/comm/out.txt +309 -0
  19. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/comm/test_dirs.py +7 -10
  20. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/comm/test_hplc_comm.py +1 -1
  21. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/constants.py +5 -3
  22. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/edit/test_edit_method.py +71 -8
  23. pychemstation-0.10.9/tests/edit/test_edit_sequence.py +373 -0
  24. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/ACQRES.REG +0 -0
  25. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/CSlbk.ini +5 -0
  26. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/DA.M/DAMETHOD.REG +0 -0
  27. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/DA.M/INFO.MTH +0 -0
  28. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/DA.M/RECALIB.MTH +0 -0
  29. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/DA.M/rpthead.txt +63 -0
  30. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/DAD1.UV +0 -0
  31. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/DAD1A.ch +0 -0
  32. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/DAD1A.npz +0 -0
  33. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/DAD1B.ch +0 -0
  34. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/DAD1B.npz +0 -0
  35. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/DAD1C.ch +0 -0
  36. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/DAD1C.npz +0 -0
  37. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/DAD1D.ch +0 -0
  38. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/DAD1D.npz +0 -0
  39. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/DAD1E.ch +0 -0
  40. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/DAD1E.npz +0 -0
  41. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/DiagResults.REG +0 -0
  42. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/Limsinf.xml +0 -0
  43. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/PMP1.AnalyticalResults.drvml +15 -0
  44. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/REPORT01.CSV +0 -0
  45. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/REPORT02.CSV +0 -0
  46. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/REPORT03.CSV +0 -0
  47. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/REPORT04.CSV +0 -0
  48. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/REPORT05.CSV +0 -0
  49. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/RUN.LOG +0 -0
  50. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/Report.TXT +0 -0
  51. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/Report00.CSV +0 -0
  52. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/Report01.xls +0 -0
  53. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/SAMPLE.XML +0 -0
  54. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/SAMPLE.XML.bak +0 -0
  55. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/WLS1.Sampler.scml +22 -0
  56. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/acq.macaml +921 -0
  57. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/acq.txt +0 -0
  58. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/acq_MethHist.txt +0 -0
  59. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/acq_damethod.reg +0 -0
  60. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/da.macaml +1113 -0
  61. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/hplc_testing 2025-03-27 17-13-47_run seq with new method.PDF +0 -0
  62. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/lcdiag.reg +0 -0
  63. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method1.D/sequence.acam_ +4404 -0
  64. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/ACQRES.REG +0 -0
  65. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/CSlbk.ini +5 -0
  66. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/DA.M/DAMETHOD.REG +0 -0
  67. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/DA.M/INFO.MTH +0 -0
  68. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/DA.M/RECALIB.MTH +0 -0
  69. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/DA.M/rpthead.txt +63 -0
  70. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/DAD1.UV +0 -0
  71. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/DAD1A.ch +0 -0
  72. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/DAD1A.npz +0 -0
  73. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/DAD1B.ch +0 -0
  74. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/DAD1B.npz +0 -0
  75. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/DAD1C.ch +0 -0
  76. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/DAD1C.npz +0 -0
  77. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/DAD1D.ch +0 -0
  78. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/DAD1D.npz +0 -0
  79. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/DAD1E.ch +0 -0
  80. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/DAD1E.npz +0 -0
  81. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/DiagResults.REG +0 -0
  82. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/Limsinf.xml +0 -0
  83. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/PMP1.AnalyticalResults.drvml +15 -0
  84. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/REPORT01.CSV +0 -0
  85. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/REPORT02.CSV +0 -0
  86. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/REPORT03.CSV +0 -0
  87. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/REPORT04.CSV +0 -0
  88. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/REPORT05.CSV +0 -0
  89. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/RUN.LOG +0 -0
  90. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/Report.TXT +0 -0
  91. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/Report00.CSV +0 -0
  92. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/Report01.xls +0 -0
  93. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/SAMPLE.XML +0 -0
  94. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/SAMPLE.XML.bak +0 -0
  95. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/WLS1.Sampler.scml +22 -0
  96. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/acq.macaml +921 -0
  97. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/acq.txt +0 -0
  98. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/acq_MethHist.txt +0 -0
  99. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/acq_damethod.reg +0 -0
  100. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/da.macaml +1113 -0
  101. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/hplc_testing 2025-03-27 17-13-47_run seq with new method.PDF +0 -0
  102. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/lcdiag.reg +0 -0
  103. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method2.D/sequence.acam_ +4404 -0
  104. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/ACQRES.REG +0 -0
  105. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/CSlbk.ini +5 -0
  106. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/DA.M/DAMETHOD.REG +0 -0
  107. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/DA.M/INFO.MTH +0 -0
  108. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/DA.M/RECALIB.MTH +0 -0
  109. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/DA.M/rpthead.txt +63 -0
  110. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/DAD1.UV +0 -0
  111. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/DAD1A.ch +0 -0
  112. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/DAD1A.npz +0 -0
  113. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/DAD1B.ch +0 -0
  114. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/DAD1B.npz +0 -0
  115. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/DAD1C.ch +0 -0
  116. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/DAD1C.npz +0 -0
  117. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/DAD1D.ch +0 -0
  118. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/DAD1D.npz +0 -0
  119. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/DAD1E.ch +0 -0
  120. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/DAD1E.npz +0 -0
  121. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/DiagResults.REG +0 -0
  122. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/Limsinf.xml +0 -0
  123. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/PMP1.AnalyticalResults.drvml +15 -0
  124. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/REPORT01.CSV +0 -0
  125. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/REPORT02.CSV +0 -0
  126. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/REPORT03.CSV +0 -0
  127. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/REPORT04.CSV +0 -0
  128. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/REPORT05.CSV +0 -0
  129. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/RUN.LOG +0 -0
  130. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/Report.TXT +0 -0
  131. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/Report00.CSV +0 -0
  132. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/Report01.xls +0 -0
  133. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/SAMPLE.XML +0 -0
  134. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/SAMPLE.XML.bak +0 -0
  135. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/WLS1.Sampler.scml +22 -0
  136. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/acq.macaml +921 -0
  137. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/acq.txt +0 -0
  138. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/acq_MethHist.txt +0 -0
  139. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/acq_damethod.reg +0 -0
  140. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/da.macaml +1113 -0
  141. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/hplc_testing 2025-03-27 17-13-47_run seq with new method.PDF +0 -0
  142. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/lcdiag.reg +0 -0
  143. pychemstation-0.10.9/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method3.D/sequence.acam_ +4404 -0
  144. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/test_offline.py +27 -3
  145. pychemstation-0.10.9/tests/load/test_load_dad.py +0 -0
  146. pychemstation-0.10.8.dev2/tests/load/test_injector.py → pychemstation-0.10.9/tests/load/test_load_injector.py +1 -1
  147. pychemstation-0.10.9/tests/load/test_load_sample_info.py +0 -0
  148. pychemstation-0.10.8.dev2/tests/load/test_load_method.py → pychemstation-0.10.9/tests/load/test_switch_method.py +5 -5
  149. pychemstation-0.10.8.dev2/tests/load/test_load_sequence.py → pychemstation-0.10.9/tests/load/test_switch_sequence.py +1 -1
  150. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/run/test_run_method.py +17 -6
  151. pychemstation-0.10.9/tests/run/test_run_sequence.py +79 -0
  152. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/test_integration.py +112 -115
  153. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/uv.lock +16 -45
  154. pychemstation-0.10.8.dev2/pychemstation/utils/mocking/mock_comm.py +0 -5
  155. pychemstation-0.10.8.dev2/pychemstation/utils/mocking/mock_hplc.py +0 -2
  156. pychemstation-0.10.8.dev2/tests/cmd +0 -1
  157. pychemstation-0.10.8.dev2/tests/comm/out.txt +0 -86
  158. pychemstation-0.10.8.dev2/tests/edit/out.txt +0 -5068
  159. pychemstation-0.10.8.dev2/tests/edit/test_edit_sequence.py +0 -198
  160. pychemstation-0.10.8.dev2/tests/load/out.txt +0 -198
  161. pychemstation-0.10.8.dev2/tests/out.txt +0 -32872
  162. pychemstation-0.10.8.dev2/tests/run/out.txt +0 -324
  163. pychemstation-0.10.8.dev2/tests/run/test_run_sequence.py +0 -227
  164. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/.gitignore +0 -0
  165. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/.gitlab-ci.yml +0 -0
  166. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/.pre-commit-config.yaml +0 -0
  167. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/CHANGELOG.md +0 -0
  168. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/CONTRIBUTING.md +0 -0
  169. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/LICENSE +0 -0
  170. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/branch-rename.sh +0 -0
  171. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/doc/index.html +0 -0
  172. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/doc/pychemstation/analysis/base_spectrum.html +0 -0
  173. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/doc/pychemstation/analysis/spec_utils.html +0 -0
  174. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/doc/pychemstation/analysis/utils.html +0 -0
  175. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/doc/pychemstation/analysis.html +0 -0
  176. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/doc/pychemstation/control/chromatogram.html +0 -0
  177. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/doc/pychemstation/control/hplc.html +0 -0
  178. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/doc/pychemstation/control.html +0 -0
  179. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/doc/pychemstation/generated.html +0 -0
  180. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/doc/pychemstation/utils/chemstation.html +0 -0
  181. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/doc/pychemstation/utils/constants.html +0 -0
  182. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/doc/pychemstation/utils/hplc_param_types.html +0 -0
  183. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/doc/pychemstation/utils.html +0 -0
  184. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/doc/pychemstation.html +0 -0
  185. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/doc/search.js +0 -0
  186. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/out.txt +0 -0
  187. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/__init__.py +0 -0
  188. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/analysis/__init__.py +0 -0
  189. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/analysis/base_spectrum.py +0 -0
  190. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/analysis/chromatogram.py +0 -0
  191. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/control/README.md +0 -0
  192. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/control/__init__.py +0 -0
  193. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/control/controllers/README.md +0 -0
  194. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/control/controllers/__init__.py +0 -0
  195. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/control/controllers/comm.py +0 -0
  196. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/control/controllers/data_aq/__init__.py +0 -0
  197. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/control/controllers/devices/__init__.py +0 -0
  198. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/control/controllers/devices/injector.py +0 -0
  199. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/generated/__init__.py +0 -0
  200. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/generated/dad_method.py +0 -0
  201. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/generated/pump_method.py +0 -0
  202. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/utils/__init__.py +0 -0
  203. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/utils/abc_tables/__init__.py +0 -0
  204. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/utils/abc_tables/device.py +0 -0
  205. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/utils/injector_types.py +0 -0
  206. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/utils/mocking/__init__.py +0 -0
  207. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/utils/num_utils.py +0 -0
  208. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/utils/parsing.py +0 -0
  209. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/utils/spec_utils.py +0 -0
  210. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation/utils/tray_types.py +0 -0
  211. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation.egg-info/PKG-INFO +0 -0
  212. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation.egg-info/SOURCES.txt +0 -0
  213. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation.egg-info/dependency_links.txt +0 -0
  214. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation.egg-info/requires.txt +0 -0
  215. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/pychemstation.egg-info/top_level.txt +0 -0
  216. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/__init__.py +0 -0
  217. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/dtypes/test_abc.py +0 -0
  218. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/0_2025-03-15 19-14-35.PDF +0 -0
  219. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/ACQRES.REG +0 -0
  220. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/CSlbk.ini +0 -0
  221. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/DA.M/DAMETHOD.REG +0 -0
  222. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/DA.M/INFO.MTH +0 -0
  223. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/DA.M/RECALIB.MTH +0 -0
  224. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/DA.M/rpthead.txt +0 -0
  225. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/DAD1.UV +0 -0
  226. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/DAD1A.ch +0 -0
  227. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/DAD1A.npz +0 -0
  228. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/DAD1B.ch +0 -0
  229. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/DAD1B.npz +0 -0
  230. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/DAD1C.ch +0 -0
  231. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/DAD1C.npz +0 -0
  232. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/DAD1D.ch +0 -0
  233. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/DAD1D.npz +0 -0
  234. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/DAD1E.ch +0 -0
  235. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/DAD1E.npz +0 -0
  236. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/DiagResults.REG +0 -0
  237. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/PMP1.AnalyticalResults.drvml +0 -0
  238. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/REPORT01.CSV +0 -0
  239. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/REPORT02.CSV +0 -0
  240. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/REPORT03.CSV +0 -0
  241. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/REPORT04.CSV +0 -0
  242. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/REPORT05.CSV +0 -0
  243. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/RUN.LOG +0 -0
  244. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/Report.TXT +0 -0
  245. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/Report00.CSV +0 -0
  246. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/Report01.xls +0 -0
  247. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/SAMPLE.XML +0 -0
  248. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/SAMPLE.XML.bak +0 -0
  249. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/WLS1.Sampler.scml +0 -0
  250. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/acq.macaml +0 -0
  251. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/acq.txt +0 -0
  252. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/acq_MethHist.txt +0 -0
  253. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/acq_damethod.reg +0 -0
  254. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/da.macaml +0 -0
  255. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/lcdiag.reg +0 -0
  256. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/sample.acaml +0 -0
  257. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/0_2025-03-15 19-14-35.D/single.B +0 -0
  258. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/ACQRES.REG +0 -0
  259. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/AUTOMATICALLY_GENERATED_REPORT01.CSV +0 -0
  260. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/AUTOMATICALLY_GENERATED_REPORT02.CSV +0 -0
  261. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/AUTOMATICALLY_GENERATED_REPORT03.CSV +0 -0
  262. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/AUTOMATICALLY_GENERATED_REPORT04.CSV +0 -0
  263. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/AUTOMATICALLY_GENERATED_REPORT05.CSV +0 -0
  264. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/Automatically_Generated_Report.TXT +0 -0
  265. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/Automatically_Generated_Report00.CSV +0 -0
  266. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/CSlbk.ini +0 -0
  267. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DA.M/DAMETHOD.REG +0 -0
  268. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DA.M/INFO.MTH +0 -0
  269. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DA.M/RECALIB.MTH +0 -0
  270. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DA.M/rpthead.txt +0 -0
  271. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1.UV +0 -0
  272. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1A.ch +0 -0
  273. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1A.npz +0 -0
  274. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1B.ch +0 -0
  275. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1B.npz +0 -0
  276. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1C.ch +0 -0
  277. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1C.npz +0 -0
  278. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1D.ch +0 -0
  279. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1D.npz +0 -0
  280. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1E.ch +0 -0
  281. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1E.npz +0 -0
  282. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1F.ch +0 -0
  283. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1F.npz +0 -0
  284. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1G.ch +0 -0
  285. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1G.npz +0 -0
  286. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1H.ch +0 -0
  287. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1H.npz +0 -0
  288. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DiagResults.REG +0 -0
  289. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/Limsinf.xml +0 -0
  290. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/PMP1.AnalyticalResults.drvml +0 -0
  291. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/RUN.LOG +0 -0
  292. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/SAMPLE.XML +0 -0
  293. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/SAMPLE.XML.bak +0 -0
  294. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/WLS1.Sampler.scml +0 -0
  295. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/acq.macaml +0 -0
  296. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/acq.txt +0 -0
  297. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/acq_MethHist.txt +0 -0
  298. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/acq_damethod.reg +0 -0
  299. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/da.macaml +0 -0
  300. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/lcdiag.reg +0 -0
  301. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/sample.acaml +0 -0
  302. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/single.B +0 -0
  303. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/CSlbk.ini +0 -0
  304. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/ACQ.MS +0 -0
  305. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/Agilent1200erDadDriver1.RapidControl.ConfigXML.xml +0 -0
  306. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/Agilent1200erDadDriver1.RapidControl.MethodMetaData.xml +0 -0
  307. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/Agilent1200erDadDriver1.RapidControl.MethodXML.xml +0 -0
  308. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentColumnCompDriver1.RapidControl.ConfigXML.xml +0 -0
  309. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentColumnCompDriver1.RapidControl.MethodMetaData.xml +0 -0
  310. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentColumnCompDriver1.RapidControl.MethodXML.xml +0 -0
  311. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentPumpDriver1.RapidControl.ConfigXML.xml +0 -0
  312. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentPumpDriver1.RapidControl.MethodMetaData.xml +0 -0
  313. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentPumpDriver1.RapidControl.MethodXML.xml +0 -0
  314. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentSamplerDriver1.RapidControl.ConfigXML.xml +0 -0
  315. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentSamplerDriver1.RapidControl.MethodMetaData.xml +0 -0
  316. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentSamplerDriver1.RapidControl.MethodXML.xml +0 -0
  317. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentSamplerDriver1.RapidControl.PretreatXML.xml +0 -0
  318. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/DAMETHOD.REG +0 -0
  319. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/FIA.REG +0 -0
  320. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/INFO.MTH +0 -0
  321. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/INJECTOR.MTH +0 -0
  322. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/MassHunterIntegration.ini +0 -0
  323. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/RECALIB.MTH +0 -0
  324. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/RapidControl.InstrumentConfig.xml +0 -0
  325. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/rpthead.txt +0 -0
  326. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/smpl_pur.mth +0 -0
  327. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/Methods.Reg +0 -0
  328. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/hplc_testing.B +0 -0
  329. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/hplc_testing.LOG +0 -0
  330. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/hplc_testing.S +0 -0
  331. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/hplc_testing.Start +0 -0
  332. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/ACQRES.REG +0 -0
  333. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/CSlbk.ini +0 -0
  334. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DA.M/DAMETHOD.REG +0 -0
  335. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DA.M/INFO.MTH +0 -0
  336. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DA.M/RECALIB.MTH +0 -0
  337. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DA.M/rpthead.txt +0 -0
  338. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1.UV +0 -0
  339. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1A.ch +0 -0
  340. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1A.npz +0 -0
  341. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1B.ch +0 -0
  342. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1B.npz +0 -0
  343. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1C.ch +0 -0
  344. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1C.npz +0 -0
  345. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1D.ch +0 -0
  346. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1D.npz +0 -0
  347. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1E.ch +0 -0
  348. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1E.npz +0 -0
  349. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DiagResults.REG +0 -0
  350. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/Limsinf.xml +0 -0
  351. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/PMP1.AnalyticalResults.drvml +0 -0
  352. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/REPORT01.CSV +0 -0
  353. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/REPORT02.CSV +0 -0
  354. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/REPORT03.CSV +0 -0
  355. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/REPORT04.CSV +0 -0
  356. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/REPORT05.CSV +0 -0
  357. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/RUN.LOG +0 -0
  358. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/Report.TXT +0 -0
  359. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/Report00.CSV +0 -0
  360. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/Report01.xls +0 -0
  361. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/SAMPLE.XML +0 -0
  362. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/SAMPLE.XML.bak +0 -0
  363. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/WLS1.Sampler.scml +0 -0
  364. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/acq.macaml +0 -0
  365. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/acq.txt +0 -0
  366. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/acq_MethHist.txt +0 -0
  367. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/acq_damethod.reg +0 -0
  368. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/da.macaml +0 -0
  369. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/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
  370. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/lcdiag.reg +0 -0
  371. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/sequence.acam_ +0 -0
  372. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/files/hplc_testing 2025-03-27 17-13-47/sequence.acaml +0 -0
  373. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/tests/hplc_talk.mac +0 -0
  374. /pychemstation-0.10.8.dev2/tests/reply → /pychemstation-0.10.9/tests/load/test_load_bottles.py +0 -0
  375. {pychemstation-0.10.8.dev2 → pychemstation-0.10.9}/update-lib.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pychemstation
3
- Version: 0.10.8.dev2
3
+ Version: 0.10.9
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
@@ -30,8 +30,7 @@ Description-Content-Type: text/markdown
30
30
  [![PyPI Latest Release](https://img.shields.io/pypi/v/pychemstation.svg)](https://pypi.org/project/pychemstation/)
31
31
 
32
32
  > **_NOTE:_** If you are running Python **3.8**, use versions 0.**8**.x. If you are running Python **3.9** use versions 0.**9**.x.
33
- > If you are running Python **>=3.10**, use version 0.**10**.x. You are welcome to use newer pychemstation versions with older Python versions, but functionality
34
- > is not guaranteed!
33
+ > If you are running Python **>=3.10**, use version 0.**10**.x. Older versions of pychemstation are not the most feature-rich and bug-free. Please consider upgrading to using Python 3.10!
35
34
 
36
35
  Unofficial Python package to control Agilent Chemstation; we are not affiliated with Agilent.
37
36
  Check out the [docs](https://pychemstation-e5a086.gitlab.io/pychemstation.html) for usage instructions. This project is under
@@ -73,21 +72,17 @@ HPLCTalk_Run
73
72
  ## Example Usage
74
73
 
75
74
  ```python
75
+ import time
76
76
  from pychemstation.control import HPLCController
77
77
  from pychemstation.utils.method_types import *
78
78
  import pandas as pd
79
79
 
80
- DEFAULT_METHOD_DIR = "C:\\ChemStation\\1\\Methods\\"
81
- SEQUENCE_DIR = "C:\\USERS\\PUBLIC\\DOCUMENTS\\CHEMSTATION\\3\\Sequence"
82
80
  DEFAULT_COMMAND_PATH = "C:\\Users\\User\\Desktop\\Lucy\\"
83
- DATA_DIR_2 = "C:\\Users\\Public\\Documents\\ChemStation\\2\\Data"
84
- DATA_DIR_3 = "C:\\Users\\Public\\Documents\\ChemStation\\3\\Data"
81
+ CUSTOM_DATA_DIR = "C:\\Users\\Public\\Documents\\ChemStation\\2\\Data\\MyData"
85
82
 
86
83
  # Initialize HPLC Controller
87
- hplc_controller = HPLCController(extra_data_dirs=[DATA_DIR_2, DATA_DIR_3],
88
- comm_dir=DEFAULT_COMMAND_PATH,
89
- method_dir=DEFAULT_METHOD_DIR,
90
- sequence_dir=SEQUENCE_DIR)
84
+ hplc_controller = HPLCController(extra_data_dirs=[CUSTOM_DATA_DIR],
85
+ comm_dir=DEFAULT_COMMAND_PATH)
91
86
 
92
87
  # Switching a method
93
88
  hplc_controller.switch_method("General-Poroshell")
@@ -116,7 +111,17 @@ new_method = MethodDetails(
116
111
  hplc_controller.edit_method(new_method)
117
112
 
118
113
  # Run a method and get a report or data from last run method
119
- hplc_controller.run_method(experiment_name="test_experiment")
114
+ hplc_controller.run_method(experiment_name="test_experiment", stall_while_running=False)
115
+ time_left, done = hplc_controller.check_method_complete()
116
+ while not done:
117
+ print(time_left)
118
+ time.sleep(time_left/2)
119
+ time_left, done = hplc_controller.check_method_complete()
120
+
121
+ # Save the path the HPLC data for later!
122
+ file_path = hplc_controller.get_last_run_method_file_path()
123
+
124
+ # Make sure CSV reports are being generated in the post-run MACRO!
120
125
  report = hplc_controller.get_last_run_method_report()
121
126
  vial_location = report.vial_location
122
127
 
@@ -5,8 +5,7 @@
5
5
  [![PyPI Latest Release](https://img.shields.io/pypi/v/pychemstation.svg)](https://pypi.org/project/pychemstation/)
6
6
 
7
7
  > **_NOTE:_** If you are running Python **3.8**, use versions 0.**8**.x. If you are running Python **3.9** use versions 0.**9**.x.
8
- > If you are running Python **>=3.10**, use version 0.**10**.x. You are welcome to use newer pychemstation versions with older Python versions, but functionality
9
- > is not guaranteed!
8
+ > If you are running Python **>=3.10**, use version 0.**10**.x. Older versions of pychemstation are not the most feature-rich and bug-free. Please consider upgrading to using Python 3.10!
10
9
 
11
10
  Unofficial Python package to control Agilent Chemstation; we are not affiliated with Agilent.
12
11
  Check out the [docs](https://pychemstation-e5a086.gitlab.io/pychemstation.html) for usage instructions. This project is under
@@ -48,21 +47,17 @@ HPLCTalk_Run
48
47
  ## Example Usage
49
48
 
50
49
  ```python
50
+ import time
51
51
  from pychemstation.control import HPLCController
52
52
  from pychemstation.utils.method_types import *
53
53
  import pandas as pd
54
54
 
55
- DEFAULT_METHOD_DIR = "C:\\ChemStation\\1\\Methods\\"
56
- SEQUENCE_DIR = "C:\\USERS\\PUBLIC\\DOCUMENTS\\CHEMSTATION\\3\\Sequence"
57
55
  DEFAULT_COMMAND_PATH = "C:\\Users\\User\\Desktop\\Lucy\\"
58
- DATA_DIR_2 = "C:\\Users\\Public\\Documents\\ChemStation\\2\\Data"
59
- DATA_DIR_3 = "C:\\Users\\Public\\Documents\\ChemStation\\3\\Data"
56
+ CUSTOM_DATA_DIR = "C:\\Users\\Public\\Documents\\ChemStation\\2\\Data\\MyData"
60
57
 
61
58
  # Initialize HPLC Controller
62
- hplc_controller = HPLCController(extra_data_dirs=[DATA_DIR_2, DATA_DIR_3],
63
- comm_dir=DEFAULT_COMMAND_PATH,
64
- method_dir=DEFAULT_METHOD_DIR,
65
- sequence_dir=SEQUENCE_DIR)
59
+ hplc_controller = HPLCController(extra_data_dirs=[CUSTOM_DATA_DIR],
60
+ comm_dir=DEFAULT_COMMAND_PATH)
66
61
 
67
62
  # Switching a method
68
63
  hplc_controller.switch_method("General-Poroshell")
@@ -91,7 +86,17 @@ new_method = MethodDetails(
91
86
  hplc_controller.edit_method(new_method)
92
87
 
93
88
  # Run a method and get a report or data from last run method
94
- hplc_controller.run_method(experiment_name="test_experiment")
89
+ hplc_controller.run_method(experiment_name="test_experiment", stall_while_running=False)
90
+ time_left, done = hplc_controller.check_method_complete()
91
+ while not done:
92
+ print(time_left)
93
+ time.sleep(time_left/2)
94
+ time_left, done = hplc_controller.check_method_complete()
95
+
96
+ # Save the path the HPLC data for later!
97
+ file_path = hplc_controller.get_last_run_method_file_path()
98
+
99
+ # Make sure CSV reports are being generated in the post-run MACRO!
95
100
  report = hplc_controller.get_last_run_method_report()
96
101
  vial_location = report.vial_location
97
102
 
@@ -83,7 +83,9 @@ class CSVProcessor(ReportProcessor):
83
83
  if "00" in name and file_extension.lower() == "csv":
84
84
  prefix, _, _ = name.partition("00")
85
85
  return prefix
86
- raise FileNotFoundError("Couldn't find the prefix for CSV")
86
+ raise FileNotFoundError(
87
+ "Couldn't find the prefix for CSV, please make sure the post-run settings generate a CSV."
88
+ )
87
89
 
88
90
  def report_contains(self, labels: List[str], want: List[str]):
89
91
  for label in labels:
@@ -3,17 +3,18 @@ from __future__ import annotations
3
3
  import os
4
4
  import time
5
5
  import warnings
6
- from typing import List, Optional, Union, Dict, Set
6
+ from typing import Dict, List, Optional, Union, Tuple
7
7
 
8
8
  from result import Err, Ok, Result
9
9
 
10
- from ....analysis.process_report import AgilentReport, ReportType
11
- from ....control.controllers import CommunicationController
12
10
  from pychemstation.analysis.chromatogram import (
13
11
  TIME_FORMAT,
14
12
  AgilentChannelChromatogramData,
15
13
  AgilentHPLCChromatogram,
16
14
  )
15
+
16
+ from ....analysis.process_report import AgilentReport, ReportType
17
+ from ....control.controllers import CommunicationController
17
18
  from ....utils.abc_tables.run import RunController
18
19
  from ....utils.macro import Command
19
20
  from ....utils.method_types import (
@@ -23,7 +24,7 @@ from ....utils.method_types import (
23
24
  PType,
24
25
  TimeTableEntry,
25
26
  )
26
- from ....utils.table_types import RegisterFlag, Table, TableOperation, T
27
+ from ....utils.table_types import RegisterFlag, T, Table, TableOperation
27
28
  from ..devices.injector import InjectorController
28
29
 
29
30
 
@@ -50,9 +51,7 @@ class MethodController(RunController):
50
51
  )
51
52
 
52
53
  def get_current_method_name(self) -> str:
53
- time.sleep(2)
54
- self.send(Command.GET_METHOD_CMD)
55
- time.sleep(2)
54
+ self.sleepy_send(Command.GET_METHOD_CMD)
56
55
  res = self.receive()
57
56
  if res.is_ok():
58
57
  return res.ok_value.string_response
@@ -77,26 +76,22 @@ class MethodController(RunController):
77
76
  raise ValueError("Communication controller is offline!")
78
77
 
79
78
  def get_row(self, row: int) -> TimeTableEntry:
80
- flow = None
81
- om = None
82
-
83
- try:
84
- flow = self.get_num(row, RegisterFlag.TIMETABLE_FLOW)
85
- except RuntimeError:
86
- pass
87
- try:
88
- om = self.get_num(row, RegisterFlag.TIMETABLE_SOLVENT_B_COMPOSITION)
89
- except RuntimeError:
90
- pass
91
-
92
- if om is None and flow is None:
93
- raise ValueError("Both flow and organic modifier is None")
94
-
95
- return TimeTableEntry(
96
- start_time=self.get_num(row, RegisterFlag.TIME),
97
- organic_modifer=om,
98
- flow=flow,
99
- )
79
+ function = self.get_text(row, RegisterFlag.FUNCTION)
80
+ if function == RegisterFlag.FLOW.value:
81
+ return TimeTableEntry(
82
+ start_time=self.get_num(row, RegisterFlag.TIME),
83
+ organic_modifer=None,
84
+ flow=self.get_num(row, RegisterFlag.TIMETABLE_FLOW),
85
+ )
86
+ if function == RegisterFlag.SOLVENT_COMPOSITION.value:
87
+ return TimeTableEntry(
88
+ start_time=self.get_num(row, RegisterFlag.TIME),
89
+ organic_modifer=self.get_num(
90
+ row, RegisterFlag.TIMETABLE_SOLVENT_B_COMPOSITION
91
+ ),
92
+ flow=None,
93
+ )
94
+ raise ValueError("Both flow and organic modifier are empty")
100
95
 
101
96
  def get_timetable(self, rows: int):
102
97
  uncoalesced_timetable_rows = [self.get_row(r + 1) for r in range(rows)]
@@ -195,7 +190,6 @@ class MethodController(RunController):
195
190
  method_dir=method_dir, method_name=method_name
196
191
  )
197
192
  )
198
-
199
193
  time.sleep(2)
200
194
  self.send(Command.GET_METHOD_CMD)
201
195
  time.sleep(2)
@@ -219,6 +213,7 @@ class MethodController(RunController):
219
213
  new_stop_time=updated_method.stop_time,
220
214
  new_post_time=updated_method.post_time,
221
215
  )
216
+ self.validate_timetable(updated_method.timetable)
222
217
  self.edit_method_timetable(updated_method.timetable)
223
218
 
224
219
  if save:
@@ -229,6 +224,7 @@ class MethodController(RunController):
229
224
  )
230
225
 
231
226
  def edit_initial_om(self, new_om: Union[int, float]):
227
+ self._validate_organic_modifier(new_om)
232
228
  initial_organic_modifier: Param = Param(
233
229
  val=new_om,
234
230
  chemstation_key=RegisterFlag.SOLVENT_B_COMPOSITION,
@@ -236,13 +232,31 @@ class MethodController(RunController):
236
232
  )
237
233
  self._update_param(initial_organic_modifier)
238
234
 
235
+ def _validate_organic_modifier(self, new_om):
236
+ if not (isinstance(new_om, int) or isinstance(new_om, float)):
237
+ raise ValueError("Organic modifier must be int or float")
238
+ if new_om < 0:
239
+ raise ValueError("Organic modifier must be positive")
240
+ if new_om > 100:
241
+ raise ValueError("Organic modifer must be less than 100.")
242
+
239
243
  def edit_flow(self, new_flow: Union[int, float]):
244
+ self._validate_flow(new_flow)
240
245
  flow: Param = Param(
241
246
  val=new_flow, chemstation_key=RegisterFlag.FLOW, ptype=PType.NUM
242
247
  )
243
248
  self._update_param(flow)
244
249
 
250
+ def _validate_flow(self, new_flow):
251
+ if not (isinstance(new_flow, int) or isinstance(new_flow, float)):
252
+ raise ValueError("Flow must be int or float")
253
+ if new_flow < 0:
254
+ raise ValueError("Flow must be positive")
255
+ if new_flow >= 5.0:
256
+ raise ValueError("Flow must be less than 5.0")
257
+
245
258
  def edit_stop_time(self, new_stop_time: Union[int, float]):
259
+ self.validate_stop_time(new_stop_time)
246
260
  stop_time: Param = Param(
247
261
  val=new_stop_time,
248
262
  chemstation_key=RegisterFlag.MAX_TIME,
@@ -255,7 +269,14 @@ class MethodController(RunController):
255
269
  )
256
270
  self._update_param(stop_time)
257
271
 
272
+ def validate_stop_time(self, new_stop_time):
273
+ if not (isinstance(new_stop_time, int) or isinstance(new_stop_time, float)):
274
+ raise ValueError("Stop time must be int or float")
275
+ if new_stop_time < 0:
276
+ raise ValueError("Stop time must be positive")
277
+
258
278
  def edit_post_time(self, new_post_time: Union[int, float]):
279
+ self.validate_post_time(new_post_time)
259
280
  post_time: Param = Param(
260
281
  val=new_post_time,
261
282
  chemstation_key=RegisterFlag.POST_TIME,
@@ -266,6 +287,12 @@ class MethodController(RunController):
266
287
  )
267
288
  self._update_param(post_time)
268
289
 
290
+ def validate_post_time(self, new_post_time):
291
+ if not (isinstance(new_post_time, int) or isinstance(new_post_time, float)):
292
+ raise ValueError("Post time must be int or float")
293
+ if new_post_time < 0:
294
+ raise ValueError("Post time must be positive")
295
+
269
296
  def update_method_params(
270
297
  self,
271
298
  new_flow: Union[int, float],
@@ -311,7 +338,7 @@ class MethodController(RunController):
311
338
  )
312
339
  if isinstance(method_param.chemstation_key, list):
313
340
  for register_flag in method_param.chemstation_key:
314
- self.send(
341
+ self.sleepy_send(
315
342
  setting_command.value.format(
316
343
  register=register,
317
344
  register_flag=register_flag,
@@ -319,66 +346,158 @@ class MethodController(RunController):
319
346
  )
320
347
  )
321
348
  else:
322
- self.send(
349
+ self.sleepy_send(
323
350
  setting_command.value.format(
324
351
  register=register,
325
352
  register_flag=method_param.chemstation_key,
326
353
  val=method_param.val,
327
354
  )
328
355
  )
329
- time.sleep(2)
330
356
  self.download()
331
357
 
332
358
  def download(self):
333
- self.send("Sleep 1")
334
359
  self.sleepy_send("DownloadRCMethod PMP1")
335
- self.send("Sleep 1")
336
360
 
337
- def _edit_row(self, row: TimeTableEntry, first_row: bool = False):
338
- if first_row:
339
- if row.organic_modifer:
340
- self.add_row()
341
- self.add_new_col_text(
342
- col_name=RegisterFlag.FUNCTION,
343
- val=RegisterFlag.SOLVENT_COMPOSITION.value,
344
- )
361
+ def _edit_row(
362
+ self,
363
+ row: TimeTableEntry,
364
+ first_row: bool,
365
+ time_added: bool,
366
+ flow_added: bool,
367
+ om_added: bool,
368
+ function_added: bool,
369
+ ) -> Tuple[bool, bool, bool, bool]:
370
+ def add_time():
371
+ nonlocal time_added
372
+ nonlocal first_row
373
+ if not time_added:
345
374
  self.add_new_col_num(col_name=RegisterFlag.TIME, val=row.start_time)
375
+ time_added = True
376
+ elif not first_row:
377
+ self._edit_row_num(col_name=RegisterFlag.TIME, val=row.start_time)
378
+
379
+ def add_flow():
380
+ nonlocal flow_added
381
+ nonlocal function_added
382
+ if not flow_added:
383
+ if not function_added:
384
+ self.add_new_col_text(
385
+ col_name=RegisterFlag.FUNCTION,
386
+ val=RegisterFlag.FLOW.value,
387
+ )
388
+ function_added = True
389
+ else:
390
+ self._edit_row_text(
391
+ col_name=RegisterFlag.FUNCTION,
392
+ val=RegisterFlag.FLOW.value,
393
+ )
346
394
  self.add_new_col_num(
347
- col_name=RegisterFlag.TIMETABLE_SOLVENT_B_COMPOSITION,
348
- val=row.organic_modifer,
395
+ col_name=RegisterFlag.TIMETABLE_FLOW,
396
+ val=row.flow,
349
397
  )
350
- if row.flow:
351
- self.add_row()
352
- self.get_num_rows()
398
+ flow_added = True
399
+ else:
353
400
  self._edit_row_text(
354
401
  col_name=RegisterFlag.FUNCTION, val=RegisterFlag.FLOW.value
355
402
  )
356
- self.add_new_col_num(col_name=RegisterFlag.TIMETABLE_FLOW, val=row.flow)
357
403
  self._edit_row_num(col_name=RegisterFlag.TIMETABLE_FLOW, val=row.flow)
358
- self.download()
359
- else:
360
- if row.organic_modifer:
361
- self.add_row()
362
- self.get_num_rows()
404
+
405
+ def add_om():
406
+ nonlocal om_added
407
+ nonlocal function_added
408
+ if not om_added:
409
+ if not function_added:
410
+ self.add_new_col_text(
411
+ col_name=RegisterFlag.FUNCTION,
412
+ val=RegisterFlag.SOLVENT_COMPOSITION.value,
413
+ )
414
+ function_added = True
415
+ else:
416
+ self._edit_row_text(
417
+ col_name=RegisterFlag.FUNCTION,
418
+ val=RegisterFlag.SOLVENT_COMPOSITION.value,
419
+ )
420
+ self.add_new_col_num(
421
+ col_name=RegisterFlag.TIMETABLE_SOLVENT_B_COMPOSITION,
422
+ val=row.organic_modifer,
423
+ )
424
+ om_added = True
425
+ else:
363
426
  self._edit_row_text(
364
427
  col_name=RegisterFlag.FUNCTION,
365
428
  val=RegisterFlag.SOLVENT_COMPOSITION.value,
366
429
  )
367
- self._edit_row_num(col_name=RegisterFlag.TIME, val=row.start_time)
368
430
  self._edit_row_num(
369
431
  col_name=RegisterFlag.TIMETABLE_SOLVENT_B_COMPOSITION,
370
432
  val=row.organic_modifer,
371
433
  )
372
- self.download()
373
- if row.flow:
374
- self.add_row()
375
- self.get_num_rows()
376
- self._edit_row_text(
377
- col_name=RegisterFlag.FUNCTION, val=RegisterFlag.FLOW.value
378
- )
379
- self._edit_row_num(col_name=RegisterFlag.TIMETABLE_FLOW, val=row.flow)
380
- self._edit_row_num(col_name=RegisterFlag.TIME, val=row.start_time)
381
- self.download()
434
+
435
+ if row.organic_modifer:
436
+ self.add_row()
437
+ add_om()
438
+ add_time()
439
+ if row.flow:
440
+ self.add_row()
441
+ add_flow()
442
+ add_time()
443
+ self.download()
444
+ return time_added, flow_added, om_added, function_added
445
+
446
+ # if first_row:
447
+ # time_added = False
448
+ # flow_row_method: Callable = (
449
+ # self.add_new_col_text
450
+ # if row.flow and not row.organic_modifer
451
+ # else self._edit_row_text
452
+ # )
453
+ # if row.organic_modifer:
454
+ # self.add_row()
455
+ # self.add_new_col_text(
456
+ # col_name=RegisterFlag.FUNCTION,
457
+ # val=RegisterFlag.SOLVENT_COMPOSITION.value,
458
+ # )
459
+ # if not time_added:
460
+ # time_added = True
461
+ # self.add_new_col_num(col_name=RegisterFlag.TIME, val=row.start_time)
462
+ # self.add_new_col_num(
463
+ # col_name=RegisterFlag.TIMETABLE_SOLVENT_B_COMPOSITION,
464
+ # val=row.organic_modifer,
465
+ # )
466
+ # if row.flow:
467
+ # self.add_row()
468
+ # self.get_num_rows()
469
+ # flow_row_method(
470
+ # col_name=RegisterFlag.FUNCTION, val=RegisterFlag.FLOW.value
471
+ # )
472
+ # if not time_added:
473
+ # time_added = True
474
+ # self.add_new_col_num(col_name=RegisterFlag.TIME, val=row.start_time)
475
+ # self.add_new_col_num(col_name=RegisterFlag.TIMETABLE_FLOW, val=row.flow)
476
+ # self._edit_row_num(col_name=RegisterFlag.TIMETABLE_FLOW, val=row.flow)
477
+ # self.download()
478
+ # else:
479
+ # if row.organic_modifer:
480
+ # self.add_row()
481
+ # self.get_num_rows()
482
+ # self._edit_row_text(
483
+ # col_name=RegisterFlag.FUNCTION,
484
+ # val=RegisterFlag.SOLVENT_COMPOSITION.value,
485
+ # )
486
+ # self._edit_row_num(col_name=RegisterFlag.TIME, val=row.start_time)
487
+ # self._edit_row_num(
488
+ # col_name=RegisterFlag.TIMETABLE_SOLVENT_B_COMPOSITION,
489
+ # val=row.organic_modifer,
490
+ # )
491
+ # self.download()
492
+ # if row.flow:
493
+ # self.add_row()
494
+ # self.get_num_rows()
495
+ # self._edit_row_text(
496
+ # col_name=RegisterFlag.FUNCTION, val=RegisterFlag.FLOW.value
497
+ # )
498
+ # self._edit_row_num(col_name=RegisterFlag.TIMETABLE_FLOW, val=row.flow)
499
+ # self._edit_row_num(col_name=RegisterFlag.TIME, val=row.start_time)
500
+ # self.download()
382
501
 
383
502
  def edit_method_timetable(self, timetable_rows: List[TimeTableEntry]):
384
503
  self.get_num_rows()
@@ -389,10 +508,23 @@ class MethodController(RunController):
389
508
  res = self.get_num_rows()
390
509
 
391
510
  self.new_table()
392
- self.get_num_rows()
393
-
511
+ num_rows = self.get_num_rows()
512
+ if num_rows.ok_value.num_response != 0:
513
+ raise ValueError("Should be zero rows!")
514
+
515
+ time_added = False
516
+ flow_added = False
517
+ om_added = False
518
+ function_added = False
394
519
  for i, row in enumerate(timetable_rows):
395
- self._edit_row(row=row, first_row=i == 0)
520
+ time_added, flow_added, om_added, function_added = self._edit_row(
521
+ row=row,
522
+ first_row=i == 0,
523
+ time_added=time_added,
524
+ flow_added=flow_added,
525
+ om_added=om_added,
526
+ function_added=function_added,
527
+ )
396
528
 
397
529
  def stop(self):
398
530
  """
@@ -441,10 +573,10 @@ class MethodController(RunController):
441
573
  else:
442
574
  warnings.warn(run_completed.err_value)
443
575
  else:
444
- folder = self._fuzzy_match_most_recent_folder(self.data_files[-1], None)
576
+ folder = self._fuzzy_match_most_recent_folder(self.data_files[-1])
445
577
  i = 0
446
578
  while folder.is_err() and i < 10:
447
- folder = self._fuzzy_match_most_recent_folder(self.data_files[-1], None)
579
+ folder = self._fuzzy_match_most_recent_folder(self.data_files[-1])
448
580
  i += 1
449
581
  if folder.is_ok():
450
582
  self.data_files[-1] = folder.ok_value
@@ -453,11 +585,11 @@ class MethodController(RunController):
453
585
  warnings.warn(warning)
454
586
 
455
587
  def _fuzzy_match_most_recent_folder(
456
- self, most_recent_folder: T, child_dirs: Optional[Set[str]]
588
+ self, most_recent_folder: T
457
589
  ) -> Result[str, str]:
458
590
  if isinstance(most_recent_folder, str) or isinstance(most_recent_folder, bytes):
459
591
  if os.path.exists(most_recent_folder):
460
- return Ok(most_recent_folder)
592
+ return Ok(str(most_recent_folder))
461
593
  return Err("Folder not found!")
462
594
  raise ValueError("Folder is not a str or byte type.")
463
595
 
@@ -490,3 +622,25 @@ class MethodController(RunController):
490
622
  if len(possible_data.x) > 0:
491
623
  signal.data = possible_data
492
624
  return [metd_report]
625
+
626
+ def _validate_row(self, row: TimeTableEntry):
627
+ if not (row.flow or row.organic_modifer):
628
+ raise ValueError(
629
+ "Require one of flow or organic modifier for the method timetable entry!"
630
+ )
631
+ if row.flow:
632
+ self._validate_flow(row.flow)
633
+ if row.organic_modifer:
634
+ self._validate_organic_modifier(row.organic_modifer)
635
+
636
+ def validate_timetable(self, timetable: List[TimeTableEntry]):
637
+ start_time = 0.0
638
+ for i, row in enumerate(timetable):
639
+ if row.start_time > start_time:
640
+ start_time = row.start_time
641
+ elif row.start_time <= start_time:
642
+ raise ValueError(
643
+ f"""Every row's start time must be larger than the previous start time.
644
+ Row {i + 1} ({timetable[i].start_time}) has a smaller or equal starttime than row {i} ({start_time})"""
645
+ )
646
+ self._validate_row(row)