PyPalmSens 1.0.0__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.
- pypalmsens-1.0.0/LICENSE +30 -0
- pypalmsens-1.0.0/MANIFEST.in +3 -0
- pypalmsens-1.0.0/PKG-INFO +71 -0
- pypalmsens-1.0.0/README.md +30 -0
- pypalmsens-1.0.0/pyproject.toml +126 -0
- pypalmsens-1.0.0/setup.cfg +4 -0
- pypalmsens-1.0.0/src/PyPalmSens.egg-info/PKG-INFO +71 -0
- pypalmsens-1.0.0/src/PyPalmSens.egg-info/SOURCES.txt +54 -0
- pypalmsens-1.0.0/src/PyPalmSens.egg-info/dependency_links.txt +1 -0
- pypalmsens-1.0.0/src/PyPalmSens.egg-info/requires.txt +17 -0
- pypalmsens-1.0.0/src/PyPalmSens.egg-info/top_level.txt +1 -0
- pypalmsens-1.0.0/src/pypalmsens/__init__.py +65 -0
- pypalmsens-1.0.0/src/pypalmsens/_data/__init__.py +18 -0
- pypalmsens-1.0.0/src/pypalmsens/_data/_shared.py +135 -0
- pypalmsens-1.0.0/src/pypalmsens/_data/curve.py +315 -0
- pypalmsens-1.0.0/src/pypalmsens/_data/data_array.py +101 -0
- pypalmsens-1.0.0/src/pypalmsens/_data/dataset.py +243 -0
- pypalmsens-1.0.0/src/pypalmsens/_data/eisdata.py +187 -0
- pypalmsens-1.0.0/src/pypalmsens/_data/measurement.py +172 -0
- pypalmsens-1.0.0/src/pypalmsens/_data/peak.py +166 -0
- pypalmsens-1.0.0/src/pypalmsens/_fitting.py +446 -0
- pypalmsens-1.0.0/src/pypalmsens/_instruments/__init__.py +13 -0
- pypalmsens-1.0.0/src/pypalmsens/_instruments/_common.py +89 -0
- pypalmsens-1.0.0/src/pypalmsens/_instruments/instrument_manager.py +728 -0
- pypalmsens-1.0.0/src/pypalmsens/_instruments/instrument_manager_async.py +781 -0
- pypalmsens-1.0.0/src/pypalmsens/_io.py +162 -0
- pypalmsens-1.0.0/src/pypalmsens/_lib/__init__.py +0 -0
- pypalmsens-1.0.0/src/pypalmsens/_lib/mono.py +63 -0
- pypalmsens-1.0.0/src/pypalmsens/_lib/windows.py +42 -0
- pypalmsens-1.0.0/src/pypalmsens/_methods/__init__.py +14 -0
- pypalmsens-1.0.0/src/pypalmsens/_methods/_shared.py +231 -0
- pypalmsens-1.0.0/src/pypalmsens/_methods/method.py +74 -0
- pypalmsens-1.0.0/src/pypalmsens/_methods/settings.py +530 -0
- pypalmsens-1.0.0/src/pypalmsens/_methods/techniques.py +1039 -0
- pypalmsens-1.0.0/src/pypalmsens/_pssdk/mono/PalmSens.Core.Linux.dll +0 -0
- pypalmsens-1.0.0/src/pypalmsens/_pssdk/mono/PalmSens.Core.dll +0 -0
- pypalmsens-1.0.0/src/pypalmsens/_pssdk/mono/PalmSens.Core.xml +22678 -0
- pypalmsens-1.0.0/src/pypalmsens/_pssdk/mono/runtimeconfig.json +9 -0
- pypalmsens-1.0.0/src/pypalmsens/_pssdk/win/PalmSens.Core.Windows.BLE.dll +0 -0
- pypalmsens-1.0.0/src/pypalmsens/_pssdk/win/PalmSens.Core.Windows.BLE.xml +3272 -0
- pypalmsens-1.0.0/src/pypalmsens/_pssdk/win/PalmSens.Core.dll +0 -0
- pypalmsens-1.0.0/src/pypalmsens/_pssdk/win/PalmSens.Core.xml +22678 -0
- pypalmsens-1.0.0/src/pypalmsens/_runtimes/linux-arm/native/System.IO.Ports.dll +0 -0
- pypalmsens-1.0.0/src/pypalmsens/_runtimes/linux-arm/native/libSystem.IO.Ports.Native.so +0 -0
- pypalmsens-1.0.0/src/pypalmsens/_runtimes/linux-arm64/native/System.IO.Ports.dll +0 -0
- pypalmsens-1.0.0/src/pypalmsens/_runtimes/linux-arm64/native/libSystem.IO.Ports.Native.so +0 -0
- pypalmsens-1.0.0/src/pypalmsens/_runtimes/linux-x64/native/System.IO.Ports.dll +0 -0
- pypalmsens-1.0.0/src/pypalmsens/_runtimes/linux-x64/native/libSystem.IO.Ports.Native.so +0 -0
- pypalmsens-1.0.0/src/pypalmsens/_runtimes/osx-arm64/native/System.IO.Ports.dll +0 -0
- pypalmsens-1.0.0/src/pypalmsens/_runtimes/osx-arm64/native/libSystem.IO.Ports.Native.dylib +0 -0
- pypalmsens-1.0.0/src/pypalmsens/_runtimes/osx-x64/native/System.IO.Ports.dll +0 -0
- pypalmsens-1.0.0/src/pypalmsens/_runtimes/osx-x64/native/libSystem.IO.Ports.Native.dylib +0 -0
- pypalmsens-1.0.0/src/pypalmsens/_shared.py +14 -0
- pypalmsens-1.0.0/src/pypalmsens/data.py +21 -0
- pypalmsens-1.0.0/src/pypalmsens/fitting.py +17 -0
- pypalmsens-1.0.0/src/pypalmsens/settings.py +47 -0
pypalmsens-1.0.0/LICENSE
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
Copyright (c) 2025 PalmSens BV
|
|
2
|
+
All rights reserved.
|
|
3
|
+
|
|
4
|
+
Redistribution and use in source and binary forms, with or without
|
|
5
|
+
modification, are permitted provided that the following conditions are met:
|
|
6
|
+
|
|
7
|
+
1. Redistributions of source code must retain the above copyright notice,
|
|
8
|
+
this list of conditions and the following disclaimer.
|
|
9
|
+
|
|
10
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
11
|
+
this list of conditions and the following disclaimer in the documentation
|
|
12
|
+
and/or other materials provided with the distribution.
|
|
13
|
+
|
|
14
|
+
3. Neither the name of the copyright holder nor the names of its
|
|
15
|
+
contributors may be used to endorse or promote products derived from
|
|
16
|
+
this software without specific prior written permission.
|
|
17
|
+
|
|
18
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
19
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
20
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
21
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
22
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
23
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
24
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
25
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
26
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
27
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
|
+
|
|
29
|
+
You acknowledge that this software is designed, licenced, and intended for use
|
|
30
|
+
with a PalmSens BV device or component.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: PyPalmSens
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Python SDK for PalmSens instruments
|
|
5
|
+
Author-email: Palmsens BV <info@palmsens.com>
|
|
6
|
+
License-Expression: LicenseRef-Modified-BSD-3-Clause-PalmSens
|
|
7
|
+
Project-URL: homepage, https://github.com/palmsens/palmsens_sdk
|
|
8
|
+
Project-URL: issues, https://github.com/palmsens/palmsens_sdk/issues
|
|
9
|
+
Project-URL: documentation, https://github.com/palmsens/palmsens_sdk
|
|
10
|
+
Project-URL: changelog, https://github.com/palmsens/palmsens_sdk/releases
|
|
11
|
+
Keywords: electrochemistry,data-analysis,voltammetry,potentiometry,impedance-specroscopy
|
|
12
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
13
|
+
Classifier: Intended Audience :: Science/Research
|
|
14
|
+
Classifier: Natural Language :: English
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Topic :: Scientific/Engineering
|
|
22
|
+
Requires-Python: >=3.10
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
License-File: LICENSE
|
|
25
|
+
Requires-Dist: attrs
|
|
26
|
+
Requires-Dist: numpy
|
|
27
|
+
Requires-Dist: packaging
|
|
28
|
+
Requires-Dist: pythonnet
|
|
29
|
+
Provides-Extra: develop
|
|
30
|
+
Requires-Dist: bump-my-version; extra == "develop"
|
|
31
|
+
Requires-Dist: coverage; extra == "develop"
|
|
32
|
+
Requires-Dist: griffe2md; extra == "develop"
|
|
33
|
+
Requires-Dist: pre-commit; extra == "develop"
|
|
34
|
+
Requires-Dist: pytest; extra == "develop"
|
|
35
|
+
Requires-Dist: pytest-asyncio; extra == "develop"
|
|
36
|
+
Provides-Extra: publishing
|
|
37
|
+
Requires-Dist: twine; extra == "publishing"
|
|
38
|
+
Requires-Dist: wheel; extra == "publishing"
|
|
39
|
+
Requires-Dist: build; extra == "publishing"
|
|
40
|
+
Dynamic: license-file
|
|
41
|
+
|
|
42
|
+
[](https://github.com/PalmSens/PalmSens_SDK/actions/workflows/python-tests.yml)
|
|
43
|
+
[](https://pypi.org/project/pypalmsens/)
|
|
44
|
+
[](https://pypi.org/project/pypalmsens/)
|
|
45
|
+
|
|
46
|
+
# PyPalmSens: Python SDK for PalmSens devices
|
|
47
|
+
|
|
48
|
+
PyPalmSens is a Python library for automating electrochemistry experiments with your PalmSens instruments.
|
|
49
|
+
It provides an intuitive Python API, making it straightforward to integrate into your Python workflows.
|
|
50
|
+
|
|
51
|
+
With PyPalmSens, you can:
|
|
52
|
+
|
|
53
|
+
- Connect to one or more instruments/channels
|
|
54
|
+
- Automate electrochemistry measurements
|
|
55
|
+
- Access and process measured data
|
|
56
|
+
- Analyze and manipulate data
|
|
57
|
+
- Perform peak detection
|
|
58
|
+
- Do Equivalent Circuit Fitting on impedance data
|
|
59
|
+
- Manually control of the cell
|
|
60
|
+
- Read and write method and data files
|
|
61
|
+
|
|
62
|
+
To install:
|
|
63
|
+
|
|
64
|
+
```python
|
|
65
|
+
pip install pypalmsens
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
PyPalmSens is built on top of the included [PalmSens .NET libraries](https://palmsens.github.io/PalmSens_SDK/palmsens-sdk/core_dll.html), and therefore requires the .NET runtime to be installed.
|
|
69
|
+
|
|
70
|
+
For specific installation instructions for your platform, see the
|
|
71
|
+
[documentation](https://palmsens.github.io/PalmSens_SDK/palmsens-sdk/python/index.html).
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
[](https://github.com/PalmSens/PalmSens_SDK/actions/workflows/python-tests.yml)
|
|
2
|
+
[](https://pypi.org/project/pypalmsens/)
|
|
3
|
+
[](https://pypi.org/project/pypalmsens/)
|
|
4
|
+
|
|
5
|
+
# PyPalmSens: Python SDK for PalmSens devices
|
|
6
|
+
|
|
7
|
+
PyPalmSens is a Python library for automating electrochemistry experiments with your PalmSens instruments.
|
|
8
|
+
It provides an intuitive Python API, making it straightforward to integrate into your Python workflows.
|
|
9
|
+
|
|
10
|
+
With PyPalmSens, you can:
|
|
11
|
+
|
|
12
|
+
- Connect to one or more instruments/channels
|
|
13
|
+
- Automate electrochemistry measurements
|
|
14
|
+
- Access and process measured data
|
|
15
|
+
- Analyze and manipulate data
|
|
16
|
+
- Perform peak detection
|
|
17
|
+
- Do Equivalent Circuit Fitting on impedance data
|
|
18
|
+
- Manually control of the cell
|
|
19
|
+
- Read and write method and data files
|
|
20
|
+
|
|
21
|
+
To install:
|
|
22
|
+
|
|
23
|
+
```python
|
|
24
|
+
pip install pypalmsens
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
PyPalmSens is built on top of the included [PalmSens .NET libraries](https://palmsens.github.io/PalmSens_SDK/palmsens-sdk/core_dll.html), and therefore requires the .NET runtime to be installed.
|
|
28
|
+
|
|
29
|
+
For specific installation instructions for your platform, see the
|
|
30
|
+
[documentation](https://palmsens.github.io/PalmSens_SDK/palmsens-sdk/python/index.html).
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=77.0"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
# https://packaging.python.org/en/latest/specifications/declaring-project-metadata/
|
|
6
|
+
[project]
|
|
7
|
+
name = "PyPalmSens"
|
|
8
|
+
version = "1.0.0"
|
|
9
|
+
description = "Python SDK for PalmSens instruments"
|
|
10
|
+
readme = "README.md"
|
|
11
|
+
requires-python = ">=3.10"
|
|
12
|
+
authors = [
|
|
13
|
+
{name = "Palmsens BV", email = "info@palmsens.com"},
|
|
14
|
+
]
|
|
15
|
+
keywords = [
|
|
16
|
+
"electrochemistry",
|
|
17
|
+
"data-analysis",
|
|
18
|
+
"voltammetry",
|
|
19
|
+
"potentiometry",
|
|
20
|
+
"impedance-specroscopy",
|
|
21
|
+
]
|
|
22
|
+
license= "LicenseRef-Modified-BSD-3-Clause-PalmSens"
|
|
23
|
+
license-files = ["LICENSE"]
|
|
24
|
+
classifiers = [
|
|
25
|
+
"Development Status :: 5 - Production/Stable",
|
|
26
|
+
"Intended Audience :: Science/Research",
|
|
27
|
+
"Natural Language :: English",
|
|
28
|
+
"Operating System :: OS Independent",
|
|
29
|
+
"Programming Language :: Python :: 3",
|
|
30
|
+
"Programming Language :: Python :: 3.10",
|
|
31
|
+
"Programming Language :: Python :: 3.11",
|
|
32
|
+
"Programming Language :: Python :: 3.12",
|
|
33
|
+
"Programming Language :: Python :: 3.13",
|
|
34
|
+
"Topic :: Scientific/Engineering",
|
|
35
|
+
]
|
|
36
|
+
dependencies = [
|
|
37
|
+
'attrs',
|
|
38
|
+
'numpy',
|
|
39
|
+
'packaging',
|
|
40
|
+
'pythonnet',
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
[project.urls]
|
|
44
|
+
homepage = "https://github.com/palmsens/palmsens_sdk"
|
|
45
|
+
issues = "https://github.com/palmsens/palmsens_sdk/issues"
|
|
46
|
+
documentation = "https://github.com/palmsens/palmsens_sdk"
|
|
47
|
+
changelog = "https://github.com/palmsens/palmsens_sdk/releases"
|
|
48
|
+
|
|
49
|
+
[project.optional-dependencies]
|
|
50
|
+
develop = [
|
|
51
|
+
"bump-my-version",
|
|
52
|
+
"coverage",
|
|
53
|
+
"griffe2md",
|
|
54
|
+
"pre-commit",
|
|
55
|
+
"pytest",
|
|
56
|
+
"pytest-asyncio",
|
|
57
|
+
]
|
|
58
|
+
|
|
59
|
+
publishing = [
|
|
60
|
+
"twine",
|
|
61
|
+
"wheel",
|
|
62
|
+
"build",
|
|
63
|
+
]
|
|
64
|
+
|
|
65
|
+
[tool.setuptools]
|
|
66
|
+
package-dir = {"" = "src"}
|
|
67
|
+
|
|
68
|
+
[tool.coverage.run]
|
|
69
|
+
branch = true
|
|
70
|
+
source = ["pypalmsens"]
|
|
71
|
+
|
|
72
|
+
[tool.pytest.ini_options]
|
|
73
|
+
testpaths = ["tests"]
|
|
74
|
+
markers = [
|
|
75
|
+
"examples: Mark tests that run the examples.",
|
|
76
|
+
"instrument: Mark tests that need an instrument connection."
|
|
77
|
+
]
|
|
78
|
+
log_cli = false
|
|
79
|
+
log_cli_level = "INFO"
|
|
80
|
+
|
|
81
|
+
[tool.ruff]
|
|
82
|
+
src=['src']
|
|
83
|
+
line-length = 96
|
|
84
|
+
target-version = "py310"
|
|
85
|
+
|
|
86
|
+
[tool.ruff.lint]
|
|
87
|
+
# Enable Pyflakes `E` and `F` codes by default.
|
|
88
|
+
select = [
|
|
89
|
+
"F", # Pyflakes
|
|
90
|
+
"E", # pycodestyle (error)
|
|
91
|
+
"W", # pycodestyle (warning)
|
|
92
|
+
"I", # isort
|
|
93
|
+
]
|
|
94
|
+
ignore = [
|
|
95
|
+
"E501", # line-too-long
|
|
96
|
+
]
|
|
97
|
+
|
|
98
|
+
[tool.ruff.lint.isort]
|
|
99
|
+
known-first-party=["pypalmsens"]
|
|
100
|
+
known-third-party = []
|
|
101
|
+
required-imports = ["from __future__ import annotations"]
|
|
102
|
+
|
|
103
|
+
[tool.ruff.lint.per-file-ignores]
|
|
104
|
+
"examples/*.py" = ["I"]
|
|
105
|
+
|
|
106
|
+
[tool.ruff.format]
|
|
107
|
+
indent-style = "space"
|
|
108
|
+
quote-style = "single"
|
|
109
|
+
|
|
110
|
+
[tool.mypy]
|
|
111
|
+
files = ["src", "tests", "examples"]
|
|
112
|
+
allow_redefinition = true
|
|
113
|
+
ignore_missing_imports = true
|
|
114
|
+
|
|
115
|
+
[tool.bumpversion]
|
|
116
|
+
current_version = "1.0.0"
|
|
117
|
+
|
|
118
|
+
[[tool.bumpversion.files]]
|
|
119
|
+
filename = "src/pypalmsens/__init__.py"
|
|
120
|
+
search = "__version__ = '{current_version}'"
|
|
121
|
+
replace = "__version__ = '{new_version}'"
|
|
122
|
+
|
|
123
|
+
[[tool.bumpversion.files]]
|
|
124
|
+
filename = "pyproject.toml"
|
|
125
|
+
search = "version = \"{current_version}\""
|
|
126
|
+
replace = "version = \"{new_version}\""
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: PyPalmSens
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Python SDK for PalmSens instruments
|
|
5
|
+
Author-email: Palmsens BV <info@palmsens.com>
|
|
6
|
+
License-Expression: LicenseRef-Modified-BSD-3-Clause-PalmSens
|
|
7
|
+
Project-URL: homepage, https://github.com/palmsens/palmsens_sdk
|
|
8
|
+
Project-URL: issues, https://github.com/palmsens/palmsens_sdk/issues
|
|
9
|
+
Project-URL: documentation, https://github.com/palmsens/palmsens_sdk
|
|
10
|
+
Project-URL: changelog, https://github.com/palmsens/palmsens_sdk/releases
|
|
11
|
+
Keywords: electrochemistry,data-analysis,voltammetry,potentiometry,impedance-specroscopy
|
|
12
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
13
|
+
Classifier: Intended Audience :: Science/Research
|
|
14
|
+
Classifier: Natural Language :: English
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Topic :: Scientific/Engineering
|
|
22
|
+
Requires-Python: >=3.10
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
License-File: LICENSE
|
|
25
|
+
Requires-Dist: attrs
|
|
26
|
+
Requires-Dist: numpy
|
|
27
|
+
Requires-Dist: packaging
|
|
28
|
+
Requires-Dist: pythonnet
|
|
29
|
+
Provides-Extra: develop
|
|
30
|
+
Requires-Dist: bump-my-version; extra == "develop"
|
|
31
|
+
Requires-Dist: coverage; extra == "develop"
|
|
32
|
+
Requires-Dist: griffe2md; extra == "develop"
|
|
33
|
+
Requires-Dist: pre-commit; extra == "develop"
|
|
34
|
+
Requires-Dist: pytest; extra == "develop"
|
|
35
|
+
Requires-Dist: pytest-asyncio; extra == "develop"
|
|
36
|
+
Provides-Extra: publishing
|
|
37
|
+
Requires-Dist: twine; extra == "publishing"
|
|
38
|
+
Requires-Dist: wheel; extra == "publishing"
|
|
39
|
+
Requires-Dist: build; extra == "publishing"
|
|
40
|
+
Dynamic: license-file
|
|
41
|
+
|
|
42
|
+
[](https://github.com/PalmSens/PalmSens_SDK/actions/workflows/python-tests.yml)
|
|
43
|
+
[](https://pypi.org/project/pypalmsens/)
|
|
44
|
+
[](https://pypi.org/project/pypalmsens/)
|
|
45
|
+
|
|
46
|
+
# PyPalmSens: Python SDK for PalmSens devices
|
|
47
|
+
|
|
48
|
+
PyPalmSens is a Python library for automating electrochemistry experiments with your PalmSens instruments.
|
|
49
|
+
It provides an intuitive Python API, making it straightforward to integrate into your Python workflows.
|
|
50
|
+
|
|
51
|
+
With PyPalmSens, you can:
|
|
52
|
+
|
|
53
|
+
- Connect to one or more instruments/channels
|
|
54
|
+
- Automate electrochemistry measurements
|
|
55
|
+
- Access and process measured data
|
|
56
|
+
- Analyze and manipulate data
|
|
57
|
+
- Perform peak detection
|
|
58
|
+
- Do Equivalent Circuit Fitting on impedance data
|
|
59
|
+
- Manually control of the cell
|
|
60
|
+
- Read and write method and data files
|
|
61
|
+
|
|
62
|
+
To install:
|
|
63
|
+
|
|
64
|
+
```python
|
|
65
|
+
pip install pypalmsens
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
PyPalmSens is built on top of the included [PalmSens .NET libraries](https://palmsens.github.io/PalmSens_SDK/palmsens-sdk/core_dll.html), and therefore requires the .NET runtime to be installed.
|
|
69
|
+
|
|
70
|
+
For specific installation instructions for your platform, see the
|
|
71
|
+
[documentation](https://palmsens.github.io/PalmSens_SDK/palmsens-sdk/python/index.html).
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
MANIFEST.in
|
|
3
|
+
README.md
|
|
4
|
+
pyproject.toml
|
|
5
|
+
src/PyPalmSens.egg-info/PKG-INFO
|
|
6
|
+
src/PyPalmSens.egg-info/SOURCES.txt
|
|
7
|
+
src/PyPalmSens.egg-info/dependency_links.txt
|
|
8
|
+
src/PyPalmSens.egg-info/requires.txt
|
|
9
|
+
src/PyPalmSens.egg-info/top_level.txt
|
|
10
|
+
src/pypalmsens/__init__.py
|
|
11
|
+
src/pypalmsens/_fitting.py
|
|
12
|
+
src/pypalmsens/_io.py
|
|
13
|
+
src/pypalmsens/_shared.py
|
|
14
|
+
src/pypalmsens/data.py
|
|
15
|
+
src/pypalmsens/fitting.py
|
|
16
|
+
src/pypalmsens/settings.py
|
|
17
|
+
src/pypalmsens/_data/__init__.py
|
|
18
|
+
src/pypalmsens/_data/_shared.py
|
|
19
|
+
src/pypalmsens/_data/curve.py
|
|
20
|
+
src/pypalmsens/_data/data_array.py
|
|
21
|
+
src/pypalmsens/_data/dataset.py
|
|
22
|
+
src/pypalmsens/_data/eisdata.py
|
|
23
|
+
src/pypalmsens/_data/measurement.py
|
|
24
|
+
src/pypalmsens/_data/peak.py
|
|
25
|
+
src/pypalmsens/_instruments/__init__.py
|
|
26
|
+
src/pypalmsens/_instruments/_common.py
|
|
27
|
+
src/pypalmsens/_instruments/instrument_manager.py
|
|
28
|
+
src/pypalmsens/_instruments/instrument_manager_async.py
|
|
29
|
+
src/pypalmsens/_lib/__init__.py
|
|
30
|
+
src/pypalmsens/_lib/mono.py
|
|
31
|
+
src/pypalmsens/_lib/windows.py
|
|
32
|
+
src/pypalmsens/_methods/__init__.py
|
|
33
|
+
src/pypalmsens/_methods/_shared.py
|
|
34
|
+
src/pypalmsens/_methods/method.py
|
|
35
|
+
src/pypalmsens/_methods/settings.py
|
|
36
|
+
src/pypalmsens/_methods/techniques.py
|
|
37
|
+
src/pypalmsens/_pssdk/mono/PalmSens.Core.Linux.dll
|
|
38
|
+
src/pypalmsens/_pssdk/mono/PalmSens.Core.dll
|
|
39
|
+
src/pypalmsens/_pssdk/mono/PalmSens.Core.xml
|
|
40
|
+
src/pypalmsens/_pssdk/mono/runtimeconfig.json
|
|
41
|
+
src/pypalmsens/_pssdk/win/PalmSens.Core.Windows.BLE.dll
|
|
42
|
+
src/pypalmsens/_pssdk/win/PalmSens.Core.Windows.BLE.xml
|
|
43
|
+
src/pypalmsens/_pssdk/win/PalmSens.Core.dll
|
|
44
|
+
src/pypalmsens/_pssdk/win/PalmSens.Core.xml
|
|
45
|
+
src/pypalmsens/_runtimes/linux-arm/native/System.IO.Ports.dll
|
|
46
|
+
src/pypalmsens/_runtimes/linux-arm/native/libSystem.IO.Ports.Native.so
|
|
47
|
+
src/pypalmsens/_runtimes/linux-arm64/native/System.IO.Ports.dll
|
|
48
|
+
src/pypalmsens/_runtimes/linux-arm64/native/libSystem.IO.Ports.Native.so
|
|
49
|
+
src/pypalmsens/_runtimes/linux-x64/native/System.IO.Ports.dll
|
|
50
|
+
src/pypalmsens/_runtimes/linux-x64/native/libSystem.IO.Ports.Native.so
|
|
51
|
+
src/pypalmsens/_runtimes/osx-arm64/native/System.IO.Ports.dll
|
|
52
|
+
src/pypalmsens/_runtimes/osx-arm64/native/libSystem.IO.Ports.Native.dylib
|
|
53
|
+
src/pypalmsens/_runtimes/osx-x64/native/System.IO.Ports.dll
|
|
54
|
+
src/pypalmsens/_runtimes/osx-x64/native/libSystem.IO.Ports.Native.dylib
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
pypalmsens
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import sys
|
|
4
|
+
|
|
5
|
+
# Load dotnet platform dependencies and init SDK
|
|
6
|
+
if sys.platform == 'win32':
|
|
7
|
+
from ._lib.windows import sdk_version
|
|
8
|
+
else:
|
|
9
|
+
from ._lib.mono import sdk_version
|
|
10
|
+
|
|
11
|
+
__version__ = '1.0.0'
|
|
12
|
+
__sdk_version__ = sdk_version
|
|
13
|
+
|
|
14
|
+
from . import data, fitting, settings
|
|
15
|
+
from ._instruments.instrument_manager import (
|
|
16
|
+
InstrumentManager,
|
|
17
|
+
connect,
|
|
18
|
+
discover,
|
|
19
|
+
)
|
|
20
|
+
from ._instruments.instrument_manager_async import (
|
|
21
|
+
InstrumentManagerAsync,
|
|
22
|
+
connect_async,
|
|
23
|
+
discover_async,
|
|
24
|
+
)
|
|
25
|
+
from ._io import load_method_file, load_session_file, save_method_file, save_session_file
|
|
26
|
+
from ._methods.techniques import (
|
|
27
|
+
ChronoAmperometry,
|
|
28
|
+
ChronoPotentiometry,
|
|
29
|
+
CyclicVoltammetry,
|
|
30
|
+
DifferentialPulseVoltammetry,
|
|
31
|
+
ElectrochemicalImpedanceSpectroscopy,
|
|
32
|
+
GalvanostaticImpedanceSpectroscopy,
|
|
33
|
+
LinearSweepVoltammetry,
|
|
34
|
+
MethodScript,
|
|
35
|
+
MultiStepAmperometry,
|
|
36
|
+
OpenCircuitPotentiometry,
|
|
37
|
+
SquareWaveVoltammetry,
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
__all__ = [
|
|
41
|
+
'settings',
|
|
42
|
+
'data',
|
|
43
|
+
'fitting',
|
|
44
|
+
'connect',
|
|
45
|
+
'connect_async',
|
|
46
|
+
'discover',
|
|
47
|
+
'discover_async',
|
|
48
|
+
'load_method_file',
|
|
49
|
+
'load_session_file',
|
|
50
|
+
'save_method_file',
|
|
51
|
+
'save_session_file',
|
|
52
|
+
'InstrumentManager',
|
|
53
|
+
'InstrumentManagerAsync',
|
|
54
|
+
'ChronoAmperometry',
|
|
55
|
+
'ChronoPotentiometry',
|
|
56
|
+
'CyclicVoltammetry',
|
|
57
|
+
'DifferentialPulseVoltammetry',
|
|
58
|
+
'ElectrochemicalImpedanceSpectroscopy',
|
|
59
|
+
'GalvanostaticImpedanceSpectroscopy',
|
|
60
|
+
'LinearSweepVoltammetry',
|
|
61
|
+
'MethodScript',
|
|
62
|
+
'MultiStepAmperometry',
|
|
63
|
+
'OpenCircuitPotentiometry',
|
|
64
|
+
'SquareWaveVoltammetry',
|
|
65
|
+
]
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from .curve import Curve
|
|
4
|
+
from .data_array import DataArray
|
|
5
|
+
from .dataset import DataSet
|
|
6
|
+
from .eisdata import EISData
|
|
7
|
+
from .measurement import DeviceInfo, Measurement
|
|
8
|
+
from .peak import Peak
|
|
9
|
+
|
|
10
|
+
__all__ = [
|
|
11
|
+
'Curve',
|
|
12
|
+
'DataArray',
|
|
13
|
+
'DataSet',
|
|
14
|
+
'DeviceInfo',
|
|
15
|
+
'EISData',
|
|
16
|
+
'Measurement',
|
|
17
|
+
'Peak',
|
|
18
|
+
]
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from enum import Enum
|
|
4
|
+
from typing import Optional
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class ArrayType(Enum):
|
|
8
|
+
"""Data array type for standard arrays."""
|
|
9
|
+
|
|
10
|
+
Unspecified = -1
|
|
11
|
+
"""Unspecified"""
|
|
12
|
+
Time = 0
|
|
13
|
+
"""Time / s"""
|
|
14
|
+
Potential = 1
|
|
15
|
+
"""Potential / V"""
|
|
16
|
+
Current = 2
|
|
17
|
+
"""Current / μA"""
|
|
18
|
+
Charge = 3
|
|
19
|
+
"""Charge"""
|
|
20
|
+
ExtraValue = 4
|
|
21
|
+
"""ExtraValue"""
|
|
22
|
+
Frequency = 5
|
|
23
|
+
"""Frequency"""
|
|
24
|
+
Phase = 6
|
|
25
|
+
"""Phase"""
|
|
26
|
+
ZRe = 7
|
|
27
|
+
"""Z real"""
|
|
28
|
+
ZIm = 8
|
|
29
|
+
"""Z imaginary"""
|
|
30
|
+
Iac = 9
|
|
31
|
+
"""I AC values"""
|
|
32
|
+
Z = 10
|
|
33
|
+
"""Z"""
|
|
34
|
+
Y = 11
|
|
35
|
+
"""Y"""
|
|
36
|
+
YRe = 12
|
|
37
|
+
"""Y real"""
|
|
38
|
+
YIm = 13
|
|
39
|
+
"""Y imaginary"""
|
|
40
|
+
Cs = 14
|
|
41
|
+
"""Cs"""
|
|
42
|
+
CsRe = 15
|
|
43
|
+
"""Cs real"""
|
|
44
|
+
CsIm = 16
|
|
45
|
+
"""Cs imaginary"""
|
|
46
|
+
Index = 17
|
|
47
|
+
"""Index"""
|
|
48
|
+
Admittance = 18
|
|
49
|
+
"""Admittance"""
|
|
50
|
+
Concentration = 19
|
|
51
|
+
"""Concentration"""
|
|
52
|
+
Signal = 20
|
|
53
|
+
"""Signal"""
|
|
54
|
+
Func = 21
|
|
55
|
+
"""Func"""
|
|
56
|
+
Integral = 22
|
|
57
|
+
"""Integral"""
|
|
58
|
+
AuxInput = 23
|
|
59
|
+
"""Auxillary input"""
|
|
60
|
+
BipotCurrent = 24
|
|
61
|
+
"""Bipot current"""
|
|
62
|
+
BipotPotential = 25
|
|
63
|
+
"""Bipot potential"""
|
|
64
|
+
ReverseCurrent = 26
|
|
65
|
+
"""Reverse current"""
|
|
66
|
+
CEPotential = 27
|
|
67
|
+
"""CE potential"""
|
|
68
|
+
DCCurrent = 28
|
|
69
|
+
"""DC current"""
|
|
70
|
+
ForwardCurrent = 29
|
|
71
|
+
"""Forward current"""
|
|
72
|
+
PotentialExtraRE = 30
|
|
73
|
+
"""Potential setpoint measured back on RE"""
|
|
74
|
+
CurrentExtraWE = 31
|
|
75
|
+
"""Current setpoint measured back on WE"""
|
|
76
|
+
InverseDerative_dtdE = 32
|
|
77
|
+
"""Inverse derivative dt/dE"""
|
|
78
|
+
mEdc = 33
|
|
79
|
+
"""Measured applied DC"""
|
|
80
|
+
Eac = 34
|
|
81
|
+
"""E AC values"""
|
|
82
|
+
MeasuredStepStartIndex = 35
|
|
83
|
+
"""MeasuredStepStartIndex"""
|
|
84
|
+
miDC = 36
|
|
85
|
+
"""Measured I DC values"""
|
|
86
|
+
SE2vsXPotential = 37
|
|
87
|
+
"""SE2 vs XPotential"""
|
|
88
|
+
|
|
89
|
+
@classmethod
|
|
90
|
+
def _missing_(cls, value):
|
|
91
|
+
return cls.Unspecified
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
class Status(Enum):
|
|
95
|
+
Unknown = -1
|
|
96
|
+
OK = 0
|
|
97
|
+
Overload = 1
|
|
98
|
+
Underload = 2
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def _get_values_from_NETArray(array, start: int = 0, count: Optional[int] = None):
|
|
102
|
+
if not count:
|
|
103
|
+
count = array.Count
|
|
104
|
+
|
|
105
|
+
values = []
|
|
106
|
+
for i in range(start, start + count):
|
|
107
|
+
value = array.get_Item(i)
|
|
108
|
+
values.append(float(value.Value))
|
|
109
|
+
return values
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def __get_currentranges_from_currentarray(
|
|
113
|
+
arraycurrents, start: int = 0, count: Optional[int] = None
|
|
114
|
+
):
|
|
115
|
+
if not count:
|
|
116
|
+
count = arraycurrents.Count
|
|
117
|
+
values = []
|
|
118
|
+
if ArrayType(arraycurrents.ArrayType) == ArrayType.Current:
|
|
119
|
+
for i in range(start, count):
|
|
120
|
+
value = arraycurrents.get_Item(i)
|
|
121
|
+
values.append(str(value.CurrentRange.ToString()))
|
|
122
|
+
return values
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def __get_status_from_current_or_potentialarray(
|
|
126
|
+
array, start: int = 0, count: Optional[int] = None
|
|
127
|
+
):
|
|
128
|
+
if not count:
|
|
129
|
+
count = array.Count
|
|
130
|
+
|
|
131
|
+
values = []
|
|
132
|
+
for i in range(start, count):
|
|
133
|
+
value = array.get_Item(i)
|
|
134
|
+
values.append(str(Status(value.ReadingStatus)))
|
|
135
|
+
return values
|