pychemstation 0.10.7__tar.gz → 0.10.8.dev1__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.
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/.gitlab-ci.yml +3 -1
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/PKG-INFO +1 -7
- pychemstation-0.10.8.dev1/branch-rename.sh +23 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/analysis/base_spectrum.py +14 -15
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/analysis/chromatogram.py +7 -8
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/analysis/process_report.py +7 -15
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/control/README.md +1 -1
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/control/controllers/__init__.py +2 -1
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/control/controllers/comm.py +33 -27
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/control/controllers/data_aq/method.py +13 -13
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/control/controllers/data_aq/sequence.py +12 -24
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/control/controllers/devices/injector.py +3 -3
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/control/hplc.py +24 -39
- pychemstation-0.10.8.dev1/pychemstation/utils/__init__.py +23 -0
- {pychemstation-0.10.7/pychemstation/control/controllers → pychemstation-0.10.8.dev1/pychemstation/utils}/abc_tables/abc_comm.py +8 -9
- {pychemstation-0.10.7/pychemstation/control/controllers → pychemstation-0.10.8.dev1/pychemstation/utils}/abc_tables/device.py +9 -2
- {pychemstation-0.10.7/pychemstation/control/controllers → pychemstation-0.10.8.dev1/pychemstation/utils}/abc_tables/run.py +35 -28
- {pychemstation-0.10.7/pychemstation/control/controllers → pychemstation-0.10.8.dev1/pychemstation/utils}/abc_tables/table.py +14 -16
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/utils/macro.py +2 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/utils/method_types.py +12 -13
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/utils/num_utils.py +3 -3
- pychemstation-0.10.8.dev1/pychemstation/utils/sequence_types.py +91 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/utils/spec_utils.py +42 -66
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/utils/table_types.py +13 -2
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/utils/tray_types.py +28 -16
- pychemstation-0.10.8.dev1/pyproject.toml +121 -0
- pychemstation-0.10.8.dev1/tests/comm/out.txt +86 -0
- pychemstation-0.10.7/tests/test_comm.py → pychemstation-0.10.8.dev1/tests/comm/test_dirs.py +3 -1
- pychemstation-0.10.7/tests/test_online.py → pychemstation-0.10.8.dev1/tests/comm/test_hplc_comm.py +1 -1
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/tests/constants.py +10 -19
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/dtypes}/test_abc.py +4 -3
- pychemstation-0.10.8.dev1/tests/edit/out.txt +5068 -0
- pychemstation-0.10.7/tests/test_method.py → pychemstation-0.10.8.dev1/tests/edit/test_edit_method.py +1 -77
- pychemstation-0.10.8.dev1/tests/edit/test_edit_sequence.py +198 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/test_offline.py +16 -12
- pychemstation-0.10.8.dev1/tests/load/out.txt +198 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/load}/test_injector.py +1 -1
- pychemstation-0.10.8.dev1/tests/load/test_load_method.py +71 -0
- pychemstation-0.10.8.dev1/tests/load/test_load_sequence.py +49 -0
- pychemstation-0.10.8.dev1/tests/run/out.txt +324 -0
- pychemstation-0.10.8.dev1/tests/run/test_run_method.py +69 -0
- pychemstation-0.10.7/tests/test_sequence.py → pychemstation-0.10.8.dev1/tests/run/test_run_sequence.py +13 -5
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/tests/test_integration.py +3 -0
- pychemstation-0.10.7/pychemstation/utils/pump_types.py +0 -7
- pychemstation-0.10.7/pychemstation/utils/sequence_types.py +0 -73
- pychemstation-0.10.7/pyproject.toml +0 -42
- pychemstation-0.10.7/tests/__init__.py +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/.gitignore +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/.pre-commit-config.yaml +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/CHANGELOG.md +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/CONTRIBUTING.md +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/LICENSE +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/README.md +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/doc/index.html +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/doc/pychemstation/analysis/base_spectrum.html +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/doc/pychemstation/analysis/spec_utils.html +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/doc/pychemstation/analysis/utils.html +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/doc/pychemstation/analysis.html +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/doc/pychemstation/control/chromatogram.html +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/doc/pychemstation/control/hplc.html +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/doc/pychemstation/control.html +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/doc/pychemstation/generated.html +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/doc/pychemstation/utils/chemstation.html +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/doc/pychemstation/utils/constants.html +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/doc/pychemstation/utils/hplc_param_types.html +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/doc/pychemstation/utils.html +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/doc/pychemstation.html +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/doc/search.js +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/out.txt +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/__init__.py +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/analysis/__init__.py +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/control/__init__.py +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/control/controllers/README.md +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/control/controllers/data_aq/__init__.py +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/control/controllers/devices/__init__.py +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/generated/__init__.py +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/generated/dad_method.py +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/generated/pump_method.py +0 -0
- {pychemstation-0.10.7/pychemstation/control/controllers → pychemstation-0.10.8.dev1/pychemstation/utils}/abc_tables/__init__.py +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/utils/injector_types.py +0 -0
- {pychemstation-0.10.7/pychemstation/utils → pychemstation-0.10.8.dev1/pychemstation/utils/mocking}/__init__.py +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/utils/mocking/mock_comm.py +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/utils/mocking/mock_hplc.py +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/utils/parsing.py +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation.egg-info/PKG-INFO +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation.egg-info/SOURCES.txt +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation.egg-info/dependency_links.txt +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation.egg-info/requires.txt +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation.egg-info/top_level.txt +0 -0
- {pychemstation-0.10.7/pychemstation/utils/mocking → pychemstation-0.10.8.dev1/tests}/__init__.py +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/tests/cmd +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/0_2025-03-15 19-14-35.PDF +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/ACQRES.REG +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/CSlbk.ini +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/DA.M/DAMETHOD.REG +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/DA.M/INFO.MTH +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/DA.M/RECALIB.MTH +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/DA.M/rpthead.txt +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/DAD1.UV +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/DAD1A.ch +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/DAD1A.npz +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/DAD1B.ch +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/DAD1B.npz +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/DAD1C.ch +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/DAD1C.npz +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/DAD1D.ch +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/DAD1D.npz +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/DAD1E.ch +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/DAD1E.npz +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/DiagResults.REG +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/PMP1.AnalyticalResults.drvml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/REPORT01.CSV +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/REPORT02.CSV +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/REPORT03.CSV +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/REPORT04.CSV +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/REPORT05.CSV +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/RUN.LOG +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/Report.TXT +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/Report00.CSV +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/Report01.xls +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/SAMPLE.XML +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/SAMPLE.XML.bak +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/WLS1.Sampler.scml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/acq.macaml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/acq.txt +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/acq_MethHist.txt +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/acq_damethod.reg +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/da.macaml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/lcdiag.reg +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/sample.acaml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/0_2025-03-15 19-14-35.D/single.B +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/ACQRES.REG +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/AUTOMATICALLY_GENERATED_REPORT01.CSV +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/AUTOMATICALLY_GENERATED_REPORT02.CSV +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/AUTOMATICALLY_GENERATED_REPORT03.CSV +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/AUTOMATICALLY_GENERATED_REPORT04.CSV +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/AUTOMATICALLY_GENERATED_REPORT05.CSV +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/Automatically_Generated_Report.TXT +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/Automatically_Generated_Report00.CSV +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/CSlbk.ini +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DA.M/DAMETHOD.REG +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DA.M/INFO.MTH +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DA.M/RECALIB.MTH +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DA.M/rpthead.txt +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1.UV +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1A.ch +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1A.npz +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1B.ch +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1B.npz +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1C.ch +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1C.npz +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1D.ch +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1D.npz +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1E.ch +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1E.npz +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1F.ch +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1F.npz +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1G.ch +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1G.npz +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1H.ch +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DAD1H.npz +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/DiagResults.REG +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/Limsinf.xml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/PMP1.AnalyticalResults.drvml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/RUN.LOG +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/SAMPLE.XML +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/SAMPLE.XML.bak +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/WLS1.Sampler.scml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/acq.macaml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/acq.txt +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/acq_MethHist.txt +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/acq_damethod.reg +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/da.macaml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/lcdiag.reg +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/sample.acaml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/10 IS 2025-02-10 23-41-33_10_2025-02-11 02-21-44.D/single.B +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/CSlbk.ini +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/ACQ.MS +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/Agilent1200erDadDriver1.RapidControl.ConfigXML.xml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/Agilent1200erDadDriver1.RapidControl.MethodMetaData.xml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/Agilent1200erDadDriver1.RapidControl.MethodXML.xml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentColumnCompDriver1.RapidControl.ConfigXML.xml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentColumnCompDriver1.RapidControl.MethodMetaData.xml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentColumnCompDriver1.RapidControl.MethodXML.xml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentPumpDriver1.RapidControl.ConfigXML.xml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentPumpDriver1.RapidControl.MethodMetaData.xml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentPumpDriver1.RapidControl.MethodXML.xml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentSamplerDriver1.RapidControl.ConfigXML.xml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentSamplerDriver1.RapidControl.MethodMetaData.xml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentSamplerDriver1.RapidControl.MethodXML.xml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/AgilentSamplerDriver1.RapidControl.PretreatXML.xml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/DAMETHOD.REG +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/FIA.REG +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/INFO.MTH +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/INJECTOR.MTH +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/MassHunterIntegration.ini +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/RECALIB.MTH +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/RapidControl.InstrumentConfig.xml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/rpthead.txt +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/GENERAL-POROSHELL-OPT.M/smpl_pur.mth +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/Methods.Reg +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/hplc_testing.B +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/hplc_testing.LOG +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/hplc_testing.S +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/hplc_testing.Start +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/ACQRES.REG +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/CSlbk.ini +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DA.M/DAMETHOD.REG +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DA.M/INFO.MTH +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DA.M/RECALIB.MTH +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DA.M/rpthead.txt +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1.UV +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1A.ch +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1A.npz +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1B.ch +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1B.npz +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1C.ch +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1C.npz +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1D.ch +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1D.npz +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1E.ch +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DAD1E.npz +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/DiagResults.REG +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/Limsinf.xml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/PMP1.AnalyticalResults.drvml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/REPORT01.CSV +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/REPORT02.CSV +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/REPORT03.CSV +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/REPORT04.CSV +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/REPORT05.CSV +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/RUN.LOG +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/Report.TXT +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/Report00.CSV +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/Report01.xls +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/SAMPLE.XML +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/SAMPLE.XML.bak +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/WLS1.Sampler.scml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/acq.macaml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/acq.txt +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/acq_MethHist.txt +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/acq_damethod.reg +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/da.macaml +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/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
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/lcdiag.reg +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/run seq with new method.D/sequence.acam_ +0 -0
- {pychemstation-0.10.7/tests → pychemstation-0.10.8.dev1/tests/files}/hplc_testing 2025-03-27 17-13-47/sequence.acaml +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/tests/hplc_talk.mac +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/tests/out.txt +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/tests/reply +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/update-lib.sh +0 -0
- {pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/uv.lock +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: pychemstation
|
3
|
-
Version: 0.10.
|
3
|
+
Version: 0.10.8.dev1
|
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
|
@@ -13,19 +13,13 @@ Classifier: Programming Language :: Python :: 3.11
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.12
|
14
14
|
Requires-Python: >=3.10
|
15
15
|
Requires-Dist: aghplctools==4.8.6
|
16
|
-
Requires-Dist: coverage>=7.6.1
|
17
16
|
Requires-Dist: matplotlib>=3.7.5
|
18
17
|
Requires-Dist: pandas>=2.0.3
|
19
18
|
Requires-Dist: pdoc>=14.7.0
|
20
19
|
Requires-Dist: polling>=0.3.2
|
21
|
-
Requires-Dist: pre-commit>=3.5.0
|
22
|
-
Requires-Dist: pytest>=7.3.5
|
23
20
|
Requires-Dist: rainbow-api>=1.0.10
|
24
21
|
Requires-Dist: result>=0.17.0
|
25
22
|
Requires-Dist: scipy>=1.10.1
|
26
|
-
Requires-Dist: seabreeze>=2.9.2
|
27
|
-
Requires-Dist: setuptools>=75.3.2
|
28
|
-
Requires-Dist: twine>=6.1.0
|
29
23
|
Requires-Dist: xsdata>=24.9
|
30
24
|
Description-Content-Type: text/markdown
|
31
25
|
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# Names of things - allows you to copy/paste commands
|
2
|
+
old_name=nightly
|
3
|
+
new_name=finn-python38-support
|
4
|
+
remote=origin
|
5
|
+
|
6
|
+
# Rename the local branch to the new name
|
7
|
+
git branch -m $old_name $new_name
|
8
|
+
|
9
|
+
# Delete the old branch on remote
|
10
|
+
git push $remote --delete $old_name
|
11
|
+
|
12
|
+
# Or shorter way to delete remote branch [:]
|
13
|
+
git push $remote :$old_name
|
14
|
+
|
15
|
+
# Prevent git from using the old name when pushing in the next step.
|
16
|
+
# Otherwise, git will use the old upstream name instead of $new_name.
|
17
|
+
git branch --unset-upstream $new_name
|
18
|
+
|
19
|
+
# Push the new branch to remote
|
20
|
+
git push $remote $new_name
|
21
|
+
|
22
|
+
# Reset the upstream branch for the new_name local branch
|
23
|
+
git push $remote -u $new_name
|
@@ -2,6 +2,7 @@ import logging
|
|
2
2
|
import os
|
3
3
|
import pickle
|
4
4
|
from abc import ABC, abstractmethod
|
5
|
+
from typing import Optional, Union
|
5
6
|
|
6
7
|
import matplotlib.pyplot as plt
|
7
8
|
import numpy as np
|
@@ -43,16 +44,15 @@ class AbstractSpectrum(ABC):
|
|
43
44
|
"baseline",
|
44
45
|
}
|
45
46
|
|
46
|
-
def __init__(
|
47
|
+
def __init__(
|
48
|
+
self, path: Optional[Union[str, bool]] = None, autosaving: Optional[bool] = True
|
49
|
+
):
|
47
50
|
"""Default constructor, loads properties into instance namespace.
|
48
51
|
|
49
52
|
Can be redefined in ancestor classes.
|
50
53
|
|
51
|
-
|
52
|
-
|
53
|
-
If omitted, uses ".//spectrum". If False - no folder created.
|
54
|
-
autosaving (bool, optional): If the True (default) will save the
|
55
|
-
spectrum when the new one is loaded. Will drop otherwise.
|
54
|
+
:param path: Valid path to save data to. If omitted, uses ".//spectrum". If False - no folder created.
|
55
|
+
:param autosaving: If the True (default) will save the spectrum when the new one is loaded. Will drop otherwise.
|
56
56
|
"""
|
57
57
|
|
58
58
|
self.autosaving = autosaving
|
@@ -70,10 +70,10 @@ class AbstractSpectrum(ABC):
|
|
70
70
|
self.path = os.path.join(".", "spectrum")
|
71
71
|
os.makedirs(self.path, exist_ok=True)
|
72
72
|
else:
|
73
|
-
|
73
|
+
if isinstance(path, str):
|
74
74
|
os.makedirs(path, exist_ok=True)
|
75
75
|
self.path = path
|
76
|
-
|
76
|
+
else:
|
77
77
|
self.path = "."
|
78
78
|
|
79
79
|
# creating logger
|
@@ -86,15 +86,14 @@ class AbstractSpectrum(ABC):
|
|
86
86
|
self.__init__(path=self.path, autosaving=self.autosaving)
|
87
87
|
|
88
88
|
@abstractmethod
|
89
|
-
def load_spectrum(self, x, y, timestamp):
|
89
|
+
def load_spectrum(self, x: np.ndarray, y: np.ndarray, timestamp: float):
|
90
90
|
"""Loads the spectral data.
|
91
91
|
|
92
92
|
This method must be redefined in ancestor classes.
|
93
93
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
timestamp (float): Timestamp to the corresponding spectrum.
|
94
|
+
:param x: An array with data to be plotted as "x" axis.
|
95
|
+
:param y: An array with data to be plotted as "y" axis.
|
96
|
+
:param timestamp: Timestamp to the corresponding spectrum.
|
98
97
|
"""
|
99
98
|
|
100
99
|
try:
|
@@ -107,8 +106,8 @@ class AbstractSpectrum(ABC):
|
|
107
106
|
self.save_data()
|
108
107
|
self._dump()
|
109
108
|
|
110
|
-
self.x = x
|
111
|
-
self.y = y
|
109
|
+
self.x: np.ndarray = x
|
110
|
+
self.y: np.ndarray = y
|
112
111
|
self.timestamp = timestamp
|
113
112
|
|
114
113
|
def save_data(self, filename=None, verbose=False):
|
@@ -3,7 +3,7 @@
|
|
3
3
|
import os
|
4
4
|
import time
|
5
5
|
from dataclasses import dataclass
|
6
|
-
from typing import Dict
|
6
|
+
from typing import Dict, Tuple
|
7
7
|
|
8
8
|
import numpy as np
|
9
9
|
|
@@ -80,15 +80,14 @@ class AgilentHPLCChromatogram(AbstractSpectrum):
|
|
80
80
|
|
81
81
|
### PUBLIC METHODS TO LOAD RAW DATA ###
|
82
82
|
|
83
|
-
def extract_rawdata(
|
84
|
-
|
85
|
-
|
83
|
+
def extract_rawdata(
|
84
|
+
self, experiment_dir: str, channel: str
|
85
|
+
) -> Tuple[np.ndarray, np.ndarray]:
|
86
|
+
"""Reads raw data from Chemstation .CH files.
|
86
87
|
|
87
|
-
|
88
|
-
experiment_dir: .D directory with the .CH files
|
88
|
+
:param experiment_dir: .D directory with the .CH files
|
89
89
|
|
90
|
-
|
91
|
-
np.array(times), np.array(values) Raw chromatogram data
|
90
|
+
:returns: np.array(times), np.array(values) Raw chromatogram data
|
92
91
|
"""
|
93
92
|
filename = os.path.join(experiment_dir, f"DAD1{channel}")
|
94
93
|
npz_file = filename + ".npz"
|
@@ -65,8 +65,7 @@ class ReportProcessor(abc.ABC):
|
|
65
65
|
|
66
66
|
class CSVProcessor(ReportProcessor):
|
67
67
|
def __init__(self, path: str):
|
68
|
-
"""
|
69
|
-
Class to process reports in CSV form.
|
68
|
+
"""Class to process reports in CSV form.
|
70
69
|
|
71
70
|
:param path: the parent folder that contains the CSV report(s) to parse.
|
72
71
|
"""
|
@@ -104,8 +103,7 @@ class CSVProcessor(ReportProcessor):
|
|
104
103
|
return all_labels_seen
|
105
104
|
|
106
105
|
def process_report(self) -> Result[AgilentReport, AnyStr]:
|
107
|
-
"""
|
108
|
-
Method to parse details from CSV report.
|
106
|
+
"""Method to parse details from CSV report.
|
109
107
|
|
110
108
|
:return: subset of complete report details, specifically the sample location, solvents in pumps,
|
111
109
|
and list of peaks at each wavelength channel.
|
@@ -176,9 +174,7 @@ class CSVProcessor(ReportProcessor):
|
|
176
174
|
|
177
175
|
|
178
176
|
class TXTProcessor(ReportProcessor):
|
179
|
-
"""
|
180
|
-
Regex matches for column and unit combinations, courtesy of Veronica Lai.
|
181
|
-
"""
|
177
|
+
"""Regex matches for column and unit combinations, courtesy of Veronica Lai."""
|
182
178
|
|
183
179
|
_column_re_dictionary = {
|
184
180
|
"Peak": { # peak index
|
@@ -212,8 +208,7 @@ class TXTProcessor(ReportProcessor):
|
|
212
208
|
max_ret_time: int = 999,
|
213
209
|
target_wavelength_range=None,
|
214
210
|
):
|
215
|
-
"""
|
216
|
-
Class to process reports in CSV form.
|
211
|
+
"""Class to process reports in CSV form.
|
217
212
|
|
218
213
|
:param path: the parent folder that contains the CSV report(s) to parse.
|
219
214
|
:param min_ret_time: peaks after this value (min) will be returned
|
@@ -228,8 +223,7 @@ class TXTProcessor(ReportProcessor):
|
|
228
223
|
super().__init__(path)
|
229
224
|
|
230
225
|
def process_report(self) -> Result[AgilentReport, Union[AnyStr, Exception]]:
|
231
|
-
"""
|
232
|
-
Method to parse details from CSV report.
|
226
|
+
"""Method to parse details from CSV report.
|
233
227
|
If you want more functionality, use `aghplctools`.
|
234
228
|
`from aghplctools.ingestion.text import pull_hplc_area_from_txt`
|
235
229
|
`signals = pull_hplc_area_from_txt(file_path)`
|
@@ -281,8 +275,7 @@ class TXTProcessor(ReportProcessor):
|
|
281
275
|
return Err(e)
|
282
276
|
|
283
277
|
def parse_area_report(self, report_text: str) -> Dict:
|
284
|
-
"""
|
285
|
-
Interprets report text and parses the area report section, converting it to dictionary.
|
278
|
+
"""Interprets report text and parses the area report section, converting it to dictionary.
|
286
279
|
Courtesy of Veronica Lai.
|
287
280
|
|
288
281
|
:param report_text: plain text version of the report.
|
@@ -340,8 +333,7 @@ class TXTProcessor(ReportProcessor):
|
|
340
333
|
return signals
|
341
334
|
|
342
335
|
def build_peak_regex(self, signal_table: str) -> Pattern[str] | None:
|
343
|
-
"""
|
344
|
-
Builds a peak regex from a signal table. Courtesy of Veronica Lai.
|
336
|
+
"""Builds a peak regex from a signal table. Courtesy of Veronica Lai.
|
345
337
|
|
346
338
|
:param signal_table: block of lines associated with an area table
|
347
339
|
:return: peak line regex object (<=3.6 _sre.SRE_PATTERN, >=3.7 re.Pattern)
|
{pychemstation-0.10.7 → pychemstation-0.10.8.dev1}/pychemstation/control/controllers/comm.py
RENAMED
@@ -15,18 +15,23 @@ from typing import Optional, Union, Tuple, List
|
|
15
15
|
|
16
16
|
from result import Err, Ok, Result
|
17
17
|
|
18
|
+
from ...utils.abc_tables.abc_comm import ABCCommunicationController
|
18
19
|
from ...utils.macro import (
|
19
20
|
Command,
|
20
21
|
HPLCErrorStatus,
|
21
22
|
Status,
|
22
23
|
str_to_status,
|
23
24
|
)
|
24
|
-
from .abc_tables.abc_comm import ABCCommunicationController
|
25
25
|
|
26
26
|
|
27
27
|
class CommunicationController(ABCCommunicationController):
|
28
|
-
"""
|
29
|
-
|
28
|
+
"""Class that communicates with Agilent using Macros
|
29
|
+
|
30
|
+
:param comm_dir: the complete directory path that was used in the MACRO file, common file that pychemstation and Chemstation use to communicate.
|
31
|
+
:param cmd_file: name of the write file that pychemstation writes MACROs to, in `comm_dir`
|
32
|
+
:param reply_file: name of the read file that Chemstation replies to, in `comm_dir
|
33
|
+
:param offline: whether or not communication with Chemstation is to be established
|
34
|
+
:param debug: if True, prints all send MACROs to an out.txt file
|
30
35
|
"""
|
31
36
|
|
32
37
|
def __init__(
|
@@ -37,12 +42,6 @@ class CommunicationController(ABCCommunicationController):
|
|
37
42
|
offline: bool = False,
|
38
43
|
debug: bool = False,
|
39
44
|
):
|
40
|
-
"""
|
41
|
-
:param comm_dir:
|
42
|
-
:param cmd_file: Name of command file
|
43
|
-
:param reply_file: Name of reply file
|
44
|
-
:param debug: whether to save log of sent commands
|
45
|
-
"""
|
46
45
|
super().__init__(comm_dir, cmd_file, reply_file, offline, debug)
|
47
46
|
|
48
47
|
def get_num_val(self, cmd: str) -> Union[int, float]:
|
@@ -151,21 +150,28 @@ class CommunicationController(ABCCommunicationController):
|
|
151
150
|
|
152
151
|
def get_chemstation_dirs(self) -> Tuple[str, str, List[str]]:
|
153
152
|
method_dir, sequence_dir, data_dirs = None, None, None
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
153
|
+
for _ in range(10):
|
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
|
+
if not sequence_dir[0].isalpha():
|
168
|
+
sequence_dir = "C:" + sequence_dir
|
169
|
+
if not method_dir[0].isalpha():
|
170
|
+
method_dir = "C:" + method_dir
|
171
|
+
for i, data_dir in enumerate(data_dirs):
|
172
|
+
if not data_dir[0].isalpha():
|
173
|
+
data_dirs[i] = "C:" + data_dir
|
174
|
+
return method_dir, sequence_dir, data_dirs
|
175
|
+
raise ValueError(
|
176
|
+
f"One of the method: {method_dir}, sequence: {sequence_dir} or data directories: {data_dirs} could not be found, please provide your own."
|
177
|
+
)
|
@@ -7,7 +7,6 @@ from typing import List, Optional, Union, Dict, Set
|
|
7
7
|
|
8
8
|
from result import Err, Ok, Result
|
9
9
|
|
10
|
-
from ..abc_tables.run import RunController
|
11
10
|
from ....analysis.process_report import AgilentReport, ReportType
|
12
11
|
from ....control.controllers import CommunicationController
|
13
12
|
from pychemstation.analysis.chromatogram import (
|
@@ -15,6 +14,7 @@ from pychemstation.analysis.chromatogram import (
|
|
15
14
|
AgilentChannelChromatogramData,
|
16
15
|
AgilentHPLCChromatogram,
|
17
16
|
)
|
17
|
+
from ....utils.abc_tables.run import RunController
|
18
18
|
from ....utils.macro import Command
|
19
19
|
from ....utils.method_types import (
|
20
20
|
HPLCMethodParams,
|
@@ -28,15 +28,13 @@ from ..devices.injector import InjectorController
|
|
28
28
|
|
29
29
|
|
30
30
|
class MethodController(RunController):
|
31
|
-
"""
|
32
|
-
Class containing method related logic
|
33
|
-
"""
|
31
|
+
"""Class containing method related logic."""
|
34
32
|
|
35
33
|
def __init__(
|
36
34
|
self,
|
37
|
-
controller: CommunicationController,
|
38
|
-
src: str,
|
39
|
-
data_dirs: List[str],
|
35
|
+
controller: Optional[CommunicationController],
|
36
|
+
src: Optional[str],
|
37
|
+
data_dirs: Optional[List[str]],
|
40
38
|
table: Table,
|
41
39
|
offline: bool,
|
42
40
|
injector_controller: InjectorController,
|
@@ -51,7 +49,7 @@ class MethodController(RunController):
|
|
51
49
|
offline=offline,
|
52
50
|
)
|
53
51
|
|
54
|
-
def
|
52
|
+
def get_current_method_name(self) -> str:
|
55
53
|
time.sleep(2)
|
56
54
|
self.send(Command.GET_METHOD_CMD)
|
57
55
|
time.sleep(2)
|
@@ -441,18 +439,20 @@ class MethodController(RunController):
|
|
441
439
|
if run_completed.is_ok():
|
442
440
|
self.data_files[-1] = run_completed.ok_value
|
443
441
|
else:
|
444
|
-
|
442
|
+
warnings.warn(run_completed.err_value)
|
445
443
|
else:
|
446
|
-
folder = self.
|
447
|
-
|
448
|
-
|
444
|
+
folder = self._fuzzy_match_most_recent_folder(self.data_files[-1], None)
|
445
|
+
i = 0
|
446
|
+
while folder.is_err() and i < 10:
|
447
|
+
folder = self._fuzzy_match_most_recent_folder(self.data_files[-1], None)
|
448
|
+
i += 1
|
449
449
|
if folder.is_ok():
|
450
450
|
self.data_files[-1] = folder.ok_value
|
451
451
|
else:
|
452
452
|
warning = f"Data folder {self.data_files[-1]} may not exist, returning and will check again after run is done."
|
453
453
|
warnings.warn(warning)
|
454
454
|
|
455
|
-
def
|
455
|
+
def _fuzzy_match_most_recent_folder(
|
456
456
|
self, most_recent_folder: T, child_dirs: Optional[Set[str]]
|
457
457
|
) -> Result[str, str]:
|
458
458
|
if isinstance(most_recent_folder, str) or isinstance(most_recent_folder, bytes):
|
@@ -13,6 +13,7 @@ from pychemstation.analysis.chromatogram import (
|
|
13
13
|
|
14
14
|
from ....analysis.process_report import AgilentReport, ReportType
|
15
15
|
from ....control.controllers.comm import CommunicationController
|
16
|
+
from ....utils.abc_tables.run import RunController
|
16
17
|
from ....utils.macro import Command
|
17
18
|
from ....utils.sequence_types import (
|
18
19
|
InjectionSource,
|
@@ -22,8 +23,7 @@ from ....utils.sequence_types import (
|
|
22
23
|
SequenceTable,
|
23
24
|
)
|
24
25
|
from ....utils.table_types import RegisterFlag, T, Table
|
25
|
-
from ....utils.tray_types import FiftyFourVialPlate,
|
26
|
-
from ..abc_tables.run import RunController
|
26
|
+
from ....utils.tray_types import FiftyFourVialPlate, VialBar, Tray
|
27
27
|
from . import MethodController
|
28
28
|
|
29
29
|
|
@@ -36,8 +36,8 @@ class SequenceController(RunController):
|
|
36
36
|
self,
|
37
37
|
controller: Optional[CommunicationController],
|
38
38
|
method_controller: MethodController,
|
39
|
-
src: str,
|
40
|
-
data_dirs: List[str],
|
39
|
+
src: Optional[str],
|
40
|
+
data_dirs: Optional[List[str]],
|
41
41
|
table: Table,
|
42
42
|
offline: bool,
|
43
43
|
):
|
@@ -80,11 +80,7 @@ class SequenceController(RunController):
|
|
80
80
|
|
81
81
|
def try_vial_location(self, val: Any) -> Tray:
|
82
82
|
try:
|
83
|
-
return (
|
84
|
-
TenVialColumn(val)
|
85
|
-
if val <= 10
|
86
|
-
else FiftyFourVialPlate.from_int(num=val)
|
87
|
-
)
|
83
|
+
return VialBar(val) if val <= 10 else FiftyFourVialPlate.from_int(num=val)
|
88
84
|
except ValueError:
|
89
85
|
raise ValueError("Expected vial location, is empty.")
|
90
86
|
|
@@ -109,15 +105,6 @@ class SequenceController(RunController):
|
|
109
105
|
data_file=data_file,
|
110
106
|
)
|
111
107
|
|
112
|
-
def check(self) -> str:
|
113
|
-
time.sleep(2)
|
114
|
-
self.send(Command.GET_SEQUENCE_CMD)
|
115
|
-
time.sleep(2)
|
116
|
-
res = self.receive()
|
117
|
-
if res.is_ok():
|
118
|
-
return res.ok_value.string_response
|
119
|
-
return "ERROR"
|
120
|
-
|
121
108
|
def switch(self, seq_name: str):
|
122
109
|
"""
|
123
110
|
Switch to the specified sequence. The sequence name does not need the '.S' extension.
|
@@ -249,7 +236,7 @@ class SequenceController(RunController):
|
|
249
236
|
|
250
237
|
def edit_vial_location(self, loc: Tray, row_num: int, save: bool = True):
|
251
238
|
loc_num = -1
|
252
|
-
if isinstance(loc,
|
239
|
+
if isinstance(loc, VialBar):
|
253
240
|
loc_num = loc.value
|
254
241
|
elif isinstance(loc, FiftyFourVialPlate):
|
255
242
|
loc_num = loc.value()
|
@@ -322,6 +309,7 @@ class SequenceController(RunController):
|
|
322
309
|
sequence_name=self.table_state.name,
|
323
310
|
dir=full_path_name,
|
324
311
|
_data_files=[r.data_file for r in self.table_state.rows],
|
312
|
+
child_dirs=[os.path.join(full_path_name, current_sample_file)],
|
325
313
|
)
|
326
314
|
self.data_files.append(data_file)
|
327
315
|
else:
|
@@ -332,12 +320,12 @@ class SequenceController(RunController):
|
|
332
320
|
if run_completed.is_ok():
|
333
321
|
self.data_files[-1] = run_completed.ok_value
|
334
322
|
else:
|
335
|
-
warnings.warn(
|
323
|
+
warnings.warn(run_completed.err_value)
|
336
324
|
else:
|
337
325
|
raise RuntimeError("Sequence run may not have started.")
|
338
326
|
|
339
327
|
@override
|
340
|
-
def
|
328
|
+
def _fuzzy_match_most_recent_folder(
|
341
329
|
self, most_recent_folder: T, child_dirs: Optional[Set[str]]
|
342
330
|
) -> Result[SequenceDataFiles, str]:
|
343
331
|
if isinstance(most_recent_folder, SequenceDataFiles):
|
@@ -383,7 +371,7 @@ class SequenceController(RunController):
|
|
383
371
|
else self.data_files[-1]
|
384
372
|
)
|
385
373
|
if len(seq_data_dir.child_dirs) == 0:
|
386
|
-
search_folder = self.
|
374
|
+
search_folder = self._fuzzy_match_most_recent_folder(
|
387
375
|
seq_data_dir, set(seq_data_dir.child_dirs)
|
388
376
|
)
|
389
377
|
if search_folder.is_ok():
|
@@ -414,7 +402,7 @@ class SequenceController(RunController):
|
|
414
402
|
else self.data_files[-1]
|
415
403
|
)
|
416
404
|
if len(seq_file_dir.child_dirs) == 0:
|
417
|
-
self.data_files[-1] = self.
|
405
|
+
self.data_files[-1] = self._fuzzy_match_most_recent_folder(
|
418
406
|
seq_file_dir, set(seq_file_dir.child_dirs)
|
419
407
|
).ok_value
|
420
408
|
spectra: List[AgilentChannelChromatogramData] = []
|
@@ -430,7 +418,7 @@ class SequenceController(RunController):
|
|
430
418
|
) -> List[AgilentReport]:
|
431
419
|
if custom_path:
|
432
420
|
self.data_files.append(
|
433
|
-
self.
|
421
|
+
self._fuzzy_match_most_recent_folder(
|
434
422
|
most_recent_folder=SequenceDataFiles(
|
435
423
|
dir=custom_path,
|
436
424
|
sequence_name="NA",
|
@@ -1,7 +1,7 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
|
-
from ..abc_tables.device import DeviceController
|
4
3
|
from ....control.controllers import CommunicationController
|
4
|
+
from ....utils.abc_tables.device import DeviceController
|
5
5
|
from ....utils.injector_types import (
|
6
6
|
Draw,
|
7
7
|
Inject,
|
@@ -17,7 +17,7 @@ from ....utils.injector_types import (
|
|
17
17
|
)
|
18
18
|
from ....utils.macro import Response
|
19
19
|
from ....utils.table_types import RegisterFlag, Table
|
20
|
-
from ....utils.tray_types import Tray, FiftyFourVialPlate,
|
20
|
+
from ....utils.tray_types import Tray, FiftyFourVialPlate, VialBar, LocationPlus
|
21
21
|
|
22
22
|
|
23
23
|
class InjectorController(DeviceController):
|
@@ -31,7 +31,7 @@ class InjectorController(DeviceController):
|
|
31
31
|
return FiftyFourVialPlate.from_str(val)
|
32
32
|
except Exception:
|
33
33
|
try:
|
34
|
-
return
|
34
|
+
return VialBar(int(val))
|
35
35
|
except Exception:
|
36
36
|
raise ValueError("Location could not be identified.")
|
37
37
|
|