drippy-eda 0.1.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.
- drippy_eda-0.1.0/LICENSE +16 -0
- drippy_eda-0.1.0/PKG-INFO +111 -0
- drippy_eda-0.1.0/README.md +82 -0
- drippy_eda-0.1.0/pyproject.toml +163 -0
- drippy_eda-0.1.0/pyproject.toml.orig +161 -0
- drippy_eda-0.1.0/src/drippy/__init__.py +80 -0
- drippy_eda-0.1.0/src/drippy/comparative.py +170 -0
- drippy_eda-0.1.0/src/drippy/data.py +321 -0
- drippy_eda-0.1.0/src/drippy/multifactor.py +192 -0
- drippy_eda-0.1.0/src/drippy/onefactor.py +229 -0
- drippy_eda-0.1.0/src/drippy/py.typed +0 -0
- drippy_eda-0.1.0/src/drippy/regression.py +330 -0
- drippy_eda-0.1.0/src/drippy/timeseries.py +185 -0
- drippy_eda-0.1.0/src/drippy/univariate.py +495 -0
- drippy_eda-0.1.0/src/drippy/utilities.py +67 -0
drippy_eda-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025, Michiel Dubbelman
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
|
|
6
|
+
documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
|
|
7
|
+
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
|
|
8
|
+
persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
9
|
+
|
|
10
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
|
|
11
|
+
Software.
|
|
12
|
+
|
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
|
14
|
+
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
15
|
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
16
|
+
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: drippy-eda
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Discover, Refine, Inspect, Present in Python, using EDA principles outlined by NIST/SEMATECH e-Handbook of Statistical Methods, http://www.itl.nist.gov/div898/handbook/eda/eda.htm to analyse data.
|
|
5
|
+
Keywords: EDA,data analysis,data,exploratory data analysis,regression,fitting
|
|
6
|
+
Author: Michiel Dubbelman
|
|
7
|
+
Author-email: Michiel Dubbelman <m.p.dubbelman@tudelft.nl>
|
|
8
|
+
License-Expression: MIT
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: Intended Audience :: Science/Research
|
|
13
|
+
Classifier: Natural Language :: English
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Requires-Dist: matplotlib>=3.10.7,<4.0.0
|
|
19
|
+
Requires-Dist: numpy>=2.3.4,<3.0.0
|
|
20
|
+
Requires-Dist: scipy>=1.16.3,<2.0.0
|
|
21
|
+
Requires-Dist: astropy>=7.1.1,<8.0.0
|
|
22
|
+
Requires-Dist: lmfit>=1.3.4,<2.0.0
|
|
23
|
+
Requires-Python: >=3.11, <4
|
|
24
|
+
Project-URL: Repository, https://github.com/Pjieter/drippy
|
|
25
|
+
Project-URL: Issues, https://github.com/Pjieter/drippy/issues
|
|
26
|
+
Project-URL: Changelog, https://github.com/Pjieter/drippy/blob/main/CHANGELOG.md
|
|
27
|
+
Project-URL: ReadTheDocs, https://drippy.readthedocs.io
|
|
28
|
+
Description-Content-Type: text/markdown
|
|
29
|
+
|
|
30
|
+
# DRIPPY
|
|
31
|
+
|
|
32
|
+
Discover, Refine, Inspect, Present in Python, using EDA principles outlined by NIST/SEMATECH e-Handbook of Statistical Methods, ([this link](http://www.itl.nist.gov/div898/handbook/eda/eda.htm)), to analyse data.
|
|
33
|
+
|
|
34
|
+
[](https://github.com/Pjieter/drippy)
|
|
35
|
+
[](https://drippy.readthedocs.io/en/latest/?badge=latest)
|
|
36
|
+
[](https://sonarcloud.io/dashboard?id=Pjieter_drippy)
|
|
37
|
+
[](https://sonarcloud.io/dashboard?id=Pjieter_drippy)
|
|
38
|
+
[](https://github.com/Pjieter/drippy/actions/workflows/build.yml)
|
|
39
|
+
[](https://github.com/Pjieter/drippy/actions/workflows/cffconvert.yml)
|
|
40
|
+
[](https://github.com/Pjieter/drippy/actions/workflows/sonarcloud.yml)
|
|
41
|
+
[](https://github.com/Pjieter/drippy/actions/workflows/link-check.yml)
|
|
42
|
+
|
|
43
|
+
## How to use drippy
|
|
44
|
+
|
|
45
|
+
drippy revolves around `EDAData`, a validated container for your data that
|
|
46
|
+
exposes every plot as a fluent method. The same plots are also available as
|
|
47
|
+
standalone functions that accept an `EDAData` instance as their first
|
|
48
|
+
argument.
|
|
49
|
+
|
|
50
|
+
```python
|
|
51
|
+
import numpy as np
|
|
52
|
+
|
|
53
|
+
from drippy import EDAData
|
|
54
|
+
from drippy import histogram
|
|
55
|
+
|
|
56
|
+
rng = np.random.default_rng(42)
|
|
57
|
+
y = rng.normal(loc=688.0, scale=65.0, size=200)
|
|
58
|
+
data = EDAData(y=y)
|
|
59
|
+
|
|
60
|
+
# Fluent API: NIST's recommended first stop for any EDA, the 4-plot
|
|
61
|
+
fig, axes = data.four_plot()
|
|
62
|
+
|
|
63
|
+
# Standalone function: same result, explicit function call
|
|
64
|
+
fig, ax = histogram(data, bins=20)
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
`EDAData` accepts optional `t` (time series), `x` (one-factor), or `factors`
|
|
68
|
+
(multi-factor/DOE) arguments to unlock the corresponding plot families:
|
|
69
|
+
|
|
70
|
+
- **Univariate** (`y = c + e`): four-plot, histogram, run-sequence plot, lag
|
|
71
|
+
plot, bootstrap plot, box-cox normality/linearity plots, normal probability
|
|
72
|
+
plot, probability plot, PPCC plot, QQ plot, Weibull plot
|
|
73
|
+
- **Time series** (`y = f(t) + e`): autocorrelation, spectral, and complex
|
|
74
|
+
demodulation plots
|
|
75
|
+
- **One-factor** (`y = f(x) + e`): box plot, scatter plot, mean/sd plots,
|
|
76
|
+
bihistogram
|
|
77
|
+
- **Multi-factor / DOE**: DOE mean/sd/scatter plots, contour plot
|
|
78
|
+
- **Regression**: six-plot, linear slope/intercept/correlation/residual-sd
|
|
79
|
+
plots
|
|
80
|
+
- **Comparative**: block plot, star plot, Youden plot
|
|
81
|
+
|
|
82
|
+
## Installation
|
|
83
|
+
|
|
84
|
+
Install drippy from PyPI (distribution name `drippy-eda`; the import name is `drippy`):
|
|
85
|
+
|
|
86
|
+
```console
|
|
87
|
+
pip install drippy-eda
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Development installation
|
|
91
|
+
|
|
92
|
+
To work on drippy itself, clone the repository and install it with
|
|
93
|
+
[uv](https://docs.astral.sh/uv/):
|
|
94
|
+
|
|
95
|
+
```console
|
|
96
|
+
git clone git@github.com:Pjieter/drippy.git && cd drippy && uv sync --all-groups
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Documentation
|
|
100
|
+
|
|
101
|
+
The documentation can be found here: [https://drippy.readthedocs.io/en/latest/](https://drippy.readthedocs.io/en/latest/)
|
|
102
|
+
## Contributing
|
|
103
|
+
|
|
104
|
+
If you want to contribute to the development of drippy,
|
|
105
|
+
have a look at the [contribution guidelines](CONTRIBUTING.md).
|
|
106
|
+
|
|
107
|
+
## Credits
|
|
108
|
+
|
|
109
|
+
This package was created with [Copier](https://github.com/copier-org/copier) and the [NLeSC/python-template](https://github.com/NLeSC/python-template).
|
|
110
|
+
|
|
111
|
+
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# DRIPPY
|
|
2
|
+
|
|
3
|
+
Discover, Refine, Inspect, Present in Python, using EDA principles outlined by NIST/SEMATECH e-Handbook of Statistical Methods, ([this link](http://www.itl.nist.gov/div898/handbook/eda/eda.htm)), to analyse data.
|
|
4
|
+
|
|
5
|
+
[](https://github.com/Pjieter/drippy)
|
|
6
|
+
[](https://drippy.readthedocs.io/en/latest/?badge=latest)
|
|
7
|
+
[](https://sonarcloud.io/dashboard?id=Pjieter_drippy)
|
|
8
|
+
[](https://sonarcloud.io/dashboard?id=Pjieter_drippy)
|
|
9
|
+
[](https://github.com/Pjieter/drippy/actions/workflows/build.yml)
|
|
10
|
+
[](https://github.com/Pjieter/drippy/actions/workflows/cffconvert.yml)
|
|
11
|
+
[](https://github.com/Pjieter/drippy/actions/workflows/sonarcloud.yml)
|
|
12
|
+
[](https://github.com/Pjieter/drippy/actions/workflows/link-check.yml)
|
|
13
|
+
|
|
14
|
+
## How to use drippy
|
|
15
|
+
|
|
16
|
+
drippy revolves around `EDAData`, a validated container for your data that
|
|
17
|
+
exposes every plot as a fluent method. The same plots are also available as
|
|
18
|
+
standalone functions that accept an `EDAData` instance as their first
|
|
19
|
+
argument.
|
|
20
|
+
|
|
21
|
+
```python
|
|
22
|
+
import numpy as np
|
|
23
|
+
|
|
24
|
+
from drippy import EDAData
|
|
25
|
+
from drippy import histogram
|
|
26
|
+
|
|
27
|
+
rng = np.random.default_rng(42)
|
|
28
|
+
y = rng.normal(loc=688.0, scale=65.0, size=200)
|
|
29
|
+
data = EDAData(y=y)
|
|
30
|
+
|
|
31
|
+
# Fluent API: NIST's recommended first stop for any EDA, the 4-plot
|
|
32
|
+
fig, axes = data.four_plot()
|
|
33
|
+
|
|
34
|
+
# Standalone function: same result, explicit function call
|
|
35
|
+
fig, ax = histogram(data, bins=20)
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
`EDAData` accepts optional `t` (time series), `x` (one-factor), or `factors`
|
|
39
|
+
(multi-factor/DOE) arguments to unlock the corresponding plot families:
|
|
40
|
+
|
|
41
|
+
- **Univariate** (`y = c + e`): four-plot, histogram, run-sequence plot, lag
|
|
42
|
+
plot, bootstrap plot, box-cox normality/linearity plots, normal probability
|
|
43
|
+
plot, probability plot, PPCC plot, QQ plot, Weibull plot
|
|
44
|
+
- **Time series** (`y = f(t) + e`): autocorrelation, spectral, and complex
|
|
45
|
+
demodulation plots
|
|
46
|
+
- **One-factor** (`y = f(x) + e`): box plot, scatter plot, mean/sd plots,
|
|
47
|
+
bihistogram
|
|
48
|
+
- **Multi-factor / DOE**: DOE mean/sd/scatter plots, contour plot
|
|
49
|
+
- **Regression**: six-plot, linear slope/intercept/correlation/residual-sd
|
|
50
|
+
plots
|
|
51
|
+
- **Comparative**: block plot, star plot, Youden plot
|
|
52
|
+
|
|
53
|
+
## Installation
|
|
54
|
+
|
|
55
|
+
Install drippy from PyPI (distribution name `drippy-eda`; the import name is `drippy`):
|
|
56
|
+
|
|
57
|
+
```console
|
|
58
|
+
pip install drippy-eda
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Development installation
|
|
62
|
+
|
|
63
|
+
To work on drippy itself, clone the repository and install it with
|
|
64
|
+
[uv](https://docs.astral.sh/uv/):
|
|
65
|
+
|
|
66
|
+
```console
|
|
67
|
+
git clone git@github.com:Pjieter/drippy.git && cd drippy && uv sync --all-groups
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Documentation
|
|
71
|
+
|
|
72
|
+
The documentation can be found here: [https://drippy.readthedocs.io/en/latest/](https://drippy.readthedocs.io/en/latest/)
|
|
73
|
+
## Contributing
|
|
74
|
+
|
|
75
|
+
If you want to contribute to the development of drippy,
|
|
76
|
+
have a look at the [contribution guidelines](CONTRIBUTING.md).
|
|
77
|
+
|
|
78
|
+
## Credits
|
|
79
|
+
|
|
80
|
+
This package was created with [Copier](https://github.com/copier-org/copier) and the [NLeSC/python-template](https://github.com/NLeSC/python-template).
|
|
81
|
+
|
|
82
|
+
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["uv_build>=0.9,<1"]
|
|
3
|
+
build-backend = "uv_build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
classifiers = [
|
|
7
|
+
"Development Status :: 4 - Beta",
|
|
8
|
+
"Intended Audience :: Developers",
|
|
9
|
+
"Intended Audience :: Science/Research",
|
|
10
|
+
"Natural Language :: English",
|
|
11
|
+
"Programming Language :: Python :: 3",
|
|
12
|
+
"Programming Language :: Python :: 3.11",
|
|
13
|
+
"Programming Language :: Python :: 3.12",
|
|
14
|
+
"Programming Language :: Python :: 3.13",
|
|
15
|
+
]
|
|
16
|
+
dependencies = [
|
|
17
|
+
"matplotlib (>=3.10.7,<4.0.0)",
|
|
18
|
+
"numpy (>=2.3.4,<3.0.0)",
|
|
19
|
+
"scipy (>=1.16.3,<2.0.0)",
|
|
20
|
+
"astropy (>=7.1.1,<8.0.0)",
|
|
21
|
+
"lmfit (>=1.3.4,<2.0.0)",
|
|
22
|
+
]
|
|
23
|
+
description = "Discover, Refine, Inspect, Present in Python, using EDA principles outlined by NIST/SEMATECH e-Handbook of Statistical Methods, http://www.itl.nist.gov/div898/handbook/eda/eda.htm to analyse data."
|
|
24
|
+
keywords = [
|
|
25
|
+
"EDA",
|
|
26
|
+
"data analysis",
|
|
27
|
+
"data",
|
|
28
|
+
"exploratory data analysis",
|
|
29
|
+
"regression",
|
|
30
|
+
"fitting",
|
|
31
|
+
]
|
|
32
|
+
license = "MIT"
|
|
33
|
+
license-files = ["LICENSE"]
|
|
34
|
+
name = "drippy-eda"
|
|
35
|
+
requires-python = ">=3.11,<4"
|
|
36
|
+
version = "0.1.0"
|
|
37
|
+
|
|
38
|
+
[[project.authors]]
|
|
39
|
+
name = "Michiel Dubbelman"
|
|
40
|
+
email = "m.p.dubbelman@tudelft.nl"
|
|
41
|
+
|
|
42
|
+
[project.readme]
|
|
43
|
+
file = "README.md"
|
|
44
|
+
content-type = "text/markdown"
|
|
45
|
+
|
|
46
|
+
[project.urls]
|
|
47
|
+
Repository = "https://github.com/Pjieter/drippy"
|
|
48
|
+
Issues = "https://github.com/Pjieter/drippy/issues"
|
|
49
|
+
Changelog = "https://github.com/Pjieter/drippy/blob/main/CHANGELOG.md"
|
|
50
|
+
ReadTheDocs = "https://drippy.readthedocs.io"
|
|
51
|
+
|
|
52
|
+
[dependency-groups]
|
|
53
|
+
docs = [
|
|
54
|
+
"sphinx (>=8.2.3,<9.0.0)",
|
|
55
|
+
"sphinx-rtd-theme (>=3.0.2,<4.0.0)",
|
|
56
|
+
"sphinx-autoapi (>=3.6.0,<4.0.0)",
|
|
57
|
+
"myst-nb (>=1.2.0,<2.0.0)",
|
|
58
|
+
"ipykernel (>=6.29.0,<7.0.0)",
|
|
59
|
+
]
|
|
60
|
+
dev = [
|
|
61
|
+
{ include-group = "docs" },
|
|
62
|
+
"bump-my-version (>=1.2.2,<2.0.0)",
|
|
63
|
+
"coverage (>=7.10.6,<8.0.0)",
|
|
64
|
+
"pytest (>=9.0.3,<10.0.0)",
|
|
65
|
+
"pytest-cov (>=7.0.0,<8.0.0)",
|
|
66
|
+
"ruff (>=0.13.0,<0.14.0)",
|
|
67
|
+
"tox (>=4.30.2,<5.0.0)",
|
|
68
|
+
"pytest-xdist[psutil] (>=3.8.0,<4.0.0)",
|
|
69
|
+
]
|
|
70
|
+
|
|
71
|
+
[tool.uv.build-backend]
|
|
72
|
+
module-name = "drippy"
|
|
73
|
+
|
|
74
|
+
[tool.pytest.ini_options]
|
|
75
|
+
testpaths = ["tests"]
|
|
76
|
+
filterwarnings = ["ignore:invalid value encountered in scalar power:RuntimeWarning"]
|
|
77
|
+
|
|
78
|
+
[tool.coverage.run]
|
|
79
|
+
branch = true
|
|
80
|
+
source = ["src/drippy"]
|
|
81
|
+
command_line = "-m pytest"
|
|
82
|
+
|
|
83
|
+
[tool.tox]
|
|
84
|
+
legacy_tox_ini = """
|
|
85
|
+
[tox]
|
|
86
|
+
envlist = py311,py312,py313
|
|
87
|
+
skip_missing_interpreters = true
|
|
88
|
+
[testenv]
|
|
89
|
+
commands = pytest
|
|
90
|
+
dependency_groups = dev
|
|
91
|
+
"""
|
|
92
|
+
|
|
93
|
+
[tool.ruff]
|
|
94
|
+
line-length = 79
|
|
95
|
+
output-format = "concise"
|
|
96
|
+
extend-exclude = ["docs"]
|
|
97
|
+
|
|
98
|
+
[tool.ruff.format]
|
|
99
|
+
docstring-code-format = true
|
|
100
|
+
docstring-code-line-length = 72
|
|
101
|
+
|
|
102
|
+
[tool.ruff.lint]
|
|
103
|
+
dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
|
|
104
|
+
select = ["ALL"]
|
|
105
|
+
ignore = [
|
|
106
|
+
"ANN204",
|
|
107
|
+
"FBT",
|
|
108
|
+
"TD",
|
|
109
|
+
"FIX001",
|
|
110
|
+
"FIX002",
|
|
111
|
+
"B028",
|
|
112
|
+
"D100",
|
|
113
|
+
"D104",
|
|
114
|
+
"D105",
|
|
115
|
+
"D107",
|
|
116
|
+
"COM812",
|
|
117
|
+
"TRY003",
|
|
118
|
+
]
|
|
119
|
+
|
|
120
|
+
[tool.ruff.lint.pydocstyle]
|
|
121
|
+
convention = "google"
|
|
122
|
+
|
|
123
|
+
[tool.ruff.lint.per-file-ignores]
|
|
124
|
+
"tests/**.py" = [
|
|
125
|
+
"ANN201",
|
|
126
|
+
"PT011",
|
|
127
|
+
"S101",
|
|
128
|
+
"ANN001",
|
|
129
|
+
"D101",
|
|
130
|
+
"D102",
|
|
131
|
+
"D103",
|
|
132
|
+
"PLR2004",
|
|
133
|
+
]
|
|
134
|
+
"src/drippy/data.py" = [
|
|
135
|
+
"ANN401",
|
|
136
|
+
"PLC0415",
|
|
137
|
+
]
|
|
138
|
+
|
|
139
|
+
[tool.ruff.lint.isort]
|
|
140
|
+
known-first-party = ["drippy"]
|
|
141
|
+
force-single-line = true
|
|
142
|
+
no-lines-before = [
|
|
143
|
+
"future",
|
|
144
|
+
"standard-library",
|
|
145
|
+
"third-party",
|
|
146
|
+
"first-party",
|
|
147
|
+
"local-folder",
|
|
148
|
+
]
|
|
149
|
+
|
|
150
|
+
[tool.bumpversion]
|
|
151
|
+
current_version = "0.1.0"
|
|
152
|
+
|
|
153
|
+
[[tool.bumpversion.files]]
|
|
154
|
+
filename = "src/drippy/__init__.py"
|
|
155
|
+
|
|
156
|
+
[[tool.bumpversion.files]]
|
|
157
|
+
filename = "pyproject.toml"
|
|
158
|
+
|
|
159
|
+
[[tool.bumpversion.files]]
|
|
160
|
+
filename = "CITATION.cff"
|
|
161
|
+
|
|
162
|
+
[[tool.bumpversion.files]]
|
|
163
|
+
filename = "docs/conf.py"
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# see documentation, e.g.
|
|
2
|
+
# - https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata
|
|
3
|
+
# - https://setuptools.pypa.io/en/latest/userguide/pyproject_config.html
|
|
4
|
+
# - https://www.python.org/dev/peps/pep-0621/
|
|
5
|
+
|
|
6
|
+
[build-system]
|
|
7
|
+
requires = ["uv_build>=0.9,<1"]
|
|
8
|
+
build-backend = "uv_build"
|
|
9
|
+
|
|
10
|
+
[project]
|
|
11
|
+
authors = [
|
|
12
|
+
{ name = "Michiel Dubbelman", email = "m.p.dubbelman@tudelft.nl" }
|
|
13
|
+
]
|
|
14
|
+
classifiers = [
|
|
15
|
+
"Development Status :: 4 - Beta",
|
|
16
|
+
"Intended Audience :: Developers",
|
|
17
|
+
"Intended Audience :: Science/Research",
|
|
18
|
+
"Natural Language :: English",
|
|
19
|
+
"Programming Language :: Python :: 3",
|
|
20
|
+
"Programming Language :: Python :: 3.11",
|
|
21
|
+
"Programming Language :: Python :: 3.12",
|
|
22
|
+
"Programming Language :: Python :: 3.13",
|
|
23
|
+
]
|
|
24
|
+
dependencies = [
|
|
25
|
+
"matplotlib (>=3.10.7,<4.0.0)",
|
|
26
|
+
"numpy (>=2.3.4,<3.0.0)",
|
|
27
|
+
"scipy (>=1.16.3,<2.0.0)",
|
|
28
|
+
"astropy (>=7.1.1,<8.0.0)",
|
|
29
|
+
"lmfit (>=1.3.4,<2.0.0)",
|
|
30
|
+
]
|
|
31
|
+
description = "Discover, Refine, Inspect, Present in Python, using EDA principles outlined by NIST/SEMATECH e-Handbook of Statistical Methods, http://www.itl.nist.gov/div898/handbook/eda/eda.htm to analyse data."
|
|
32
|
+
keywords = ["EDA", "data analysis", "data", "exploratory data analysis", "regression", "fitting"]
|
|
33
|
+
license = "MIT"
|
|
34
|
+
license-files = ["LICENSE"]
|
|
35
|
+
|
|
36
|
+
name = "drippy-eda"
|
|
37
|
+
readme = {file = "README.md", content-type = "text/markdown"}
|
|
38
|
+
requires-python = ">=3.11,<4"
|
|
39
|
+
version = "0.1.0"
|
|
40
|
+
|
|
41
|
+
[dependency-groups]
|
|
42
|
+
docs = [
|
|
43
|
+
"sphinx (>=8.2.3,<9.0.0)",
|
|
44
|
+
"sphinx-rtd-theme (>=3.0.2,<4.0.0)",
|
|
45
|
+
"sphinx-autoapi (>=3.6.0,<4.0.0)",
|
|
46
|
+
"myst-nb (>=1.2.0,<2.0.0)",
|
|
47
|
+
"ipykernel (>=6.29.0,<7.0.0)",
|
|
48
|
+
]
|
|
49
|
+
dev = [
|
|
50
|
+
{include-group = "docs"},
|
|
51
|
+
"bump-my-version (>=1.2.2,<2.0.0)",
|
|
52
|
+
"coverage (>=7.10.6,<8.0.0)",
|
|
53
|
+
"pytest (>=9.0.3,<10.0.0)",
|
|
54
|
+
"pytest-cov (>=7.0.0,<8.0.0)",
|
|
55
|
+
"ruff (>=0.13.0,<0.14.0)",
|
|
56
|
+
"tox (>=4.30.2,<5.0.0)",
|
|
57
|
+
"pytest-xdist[psutil] (>=3.8.0,<4.0.0)",
|
|
58
|
+
]
|
|
59
|
+
|
|
60
|
+
[tool.uv.build-backend]
|
|
61
|
+
# Distribution is drippy-eda (the PyPI name "drippy" is taken); the import
|
|
62
|
+
# package stays drippy.
|
|
63
|
+
module-name = "drippy"
|
|
64
|
+
|
|
65
|
+
[project.urls]
|
|
66
|
+
Repository = "https://github.com/Pjieter/drippy"
|
|
67
|
+
Issues = "https://github.com/Pjieter/drippy/issues"
|
|
68
|
+
Changelog = "https://github.com/Pjieter/drippy/blob/main/CHANGELOG.md"
|
|
69
|
+
ReadTheDocs = "https://drippy.readthedocs.io"
|
|
70
|
+
|
|
71
|
+
[tool.pytest.ini_options]
|
|
72
|
+
testpaths = ["tests"]
|
|
73
|
+
filterwarnings = [
|
|
74
|
+
"ignore:invalid value encountered in scalar power:RuntimeWarning",
|
|
75
|
+
]
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
[tool.coverage.run]
|
|
79
|
+
branch = true
|
|
80
|
+
source = ["src/drippy"]
|
|
81
|
+
command_line = "-m pytest"
|
|
82
|
+
|
|
83
|
+
[tool.tox]
|
|
84
|
+
legacy_tox_ini = """
|
|
85
|
+
[tox]
|
|
86
|
+
envlist = py311,py312,py313
|
|
87
|
+
skip_missing_interpreters = true
|
|
88
|
+
[testenv]
|
|
89
|
+
commands = pytest
|
|
90
|
+
dependency_groups = dev
|
|
91
|
+
"""
|
|
92
|
+
|
|
93
|
+
[tool.ruff]
|
|
94
|
+
line-length = 79
|
|
95
|
+
output-format = "concise"
|
|
96
|
+
extend-exclude = ["docs"]
|
|
97
|
+
|
|
98
|
+
[tool.ruff.format]
|
|
99
|
+
docstring-code-format = true
|
|
100
|
+
docstring-code-line-length = 72
|
|
101
|
+
|
|
102
|
+
[tool.ruff.lint]
|
|
103
|
+
# Allow unused variables when underscore-prefixed.
|
|
104
|
+
dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
|
|
105
|
+
|
|
106
|
+
# Enable Pyflakes `E` and `F` codes by default.
|
|
107
|
+
select = ["ALL"]
|
|
108
|
+
ignore = [
|
|
109
|
+
"ANN204", # Missing return type annotation for special (dunder) method
|
|
110
|
+
"FBT", # Using boolean function arguments
|
|
111
|
+
"TD", # TODOs
|
|
112
|
+
"FIX001", # Resolve FIXMEs
|
|
113
|
+
"FIX002", # Resolve TODOs
|
|
114
|
+
"B028", # No explicit `stacklevel` keyword argument found in warning
|
|
115
|
+
# No docstrings required in the following cases
|
|
116
|
+
"D100", # Missing module docstring
|
|
117
|
+
"D104", # Missing public package docstring
|
|
118
|
+
"D105", # Missing docstring in magic method
|
|
119
|
+
"D107", # Missing docstring in `__init__`
|
|
120
|
+
"COM812", # Missing trailing comma in a multi-line collection, for removing conflict with formatter
|
|
121
|
+
"TRY003", # Avoid specifying long messages outside the exception class
|
|
122
|
+
]
|
|
123
|
+
pydocstyle.convention = "google"
|
|
124
|
+
|
|
125
|
+
[tool.ruff.lint.per-file-ignores]
|
|
126
|
+
# Tests can ignore a few extra rules
|
|
127
|
+
"tests/**.py" = [
|
|
128
|
+
"ANN201", # Missing return type annotation for public function
|
|
129
|
+
"PT011", # Missing `match` parameter in `pytest.raises()`
|
|
130
|
+
"S101", # Use of assert is detected
|
|
131
|
+
"ANN001", # Missing type annotation for function arguments
|
|
132
|
+
"D101", # Missing docstring in public class
|
|
133
|
+
"D102", # Missing docstring in public method
|
|
134
|
+
"D103", # Missing docstring in public function
|
|
135
|
+
"PLR2004", # Magic value used in comparison
|
|
136
|
+
]
|
|
137
|
+
# Fluent methods in data.py use lazy imports to avoid circular dependencies
|
|
138
|
+
"src/drippy/data.py" = [
|
|
139
|
+
"ANN401", # Dynamically typed expressions in **kwargs
|
|
140
|
+
"PLC0415", # Import should be at top-level (lazy imports for circular deps)
|
|
141
|
+
]
|
|
142
|
+
|
|
143
|
+
[tool.ruff.lint.isort]
|
|
144
|
+
known-first-party = ["drippy"]
|
|
145
|
+
force-single-line = true
|
|
146
|
+
no-lines-before = ["future","standard-library","third-party","first-party","local-folder"]
|
|
147
|
+
|
|
148
|
+
[tool.bumpversion]
|
|
149
|
+
current_version = "0.1.0"
|
|
150
|
+
|
|
151
|
+
[[tool.bumpversion.files]]
|
|
152
|
+
filename = "src/drippy/__init__.py"
|
|
153
|
+
|
|
154
|
+
[[tool.bumpversion.files]]
|
|
155
|
+
filename = "pyproject.toml"
|
|
156
|
+
|
|
157
|
+
[[tool.bumpversion.files]]
|
|
158
|
+
filename = "CITATION.cff"
|
|
159
|
+
|
|
160
|
+
[[tool.bumpversion.files]]
|
|
161
|
+
filename = "docs/conf.py"
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"""drippy — EDA plotting library following NIST/SEMATECH principles."""
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from drippy.comparative import block_plot
|
|
5
|
+
from drippy.comparative import star_plot
|
|
6
|
+
from drippy.comparative import youden_plot
|
|
7
|
+
from drippy.data import EDAData
|
|
8
|
+
from drippy.multifactor import contour_plot
|
|
9
|
+
from drippy.multifactor import doe_mean_plot
|
|
10
|
+
from drippy.multifactor import doe_scatter_plot
|
|
11
|
+
from drippy.multifactor import doe_sd_plot
|
|
12
|
+
from drippy.onefactor import bihistogram
|
|
13
|
+
from drippy.onefactor import box_plot
|
|
14
|
+
from drippy.onefactor import mean_plot
|
|
15
|
+
from drippy.onefactor import qq_plot
|
|
16
|
+
from drippy.onefactor import scatter_plot
|
|
17
|
+
from drippy.onefactor import sd_plot
|
|
18
|
+
from drippy.regression import linear_correlation_plot
|
|
19
|
+
from drippy.regression import linear_intercept_plot
|
|
20
|
+
from drippy.regression import linear_residual_sd_plot
|
|
21
|
+
from drippy.regression import linear_slope_plot
|
|
22
|
+
from drippy.regression import six_plot
|
|
23
|
+
from drippy.timeseries import autocorrelation_plot
|
|
24
|
+
from drippy.timeseries import complex_demodulation_amplitude_plot
|
|
25
|
+
from drippy.timeseries import complex_demodulation_phase_plot
|
|
26
|
+
from drippy.timeseries import spectral_plot
|
|
27
|
+
from drippy.univariate import bootstrap_plot
|
|
28
|
+
from drippy.univariate import box_cox_linearity_plot
|
|
29
|
+
from drippy.univariate import box_cox_normality_plot
|
|
30
|
+
from drippy.univariate import four_plot
|
|
31
|
+
from drippy.univariate import histogram
|
|
32
|
+
from drippy.univariate import lag_plot
|
|
33
|
+
from drippy.univariate import normal_probability_plot
|
|
34
|
+
from drippy.univariate import ppcc_plot
|
|
35
|
+
from drippy.univariate import probability_plot
|
|
36
|
+
from drippy.univariate import run_sequence_plot
|
|
37
|
+
from drippy.univariate import weibull_plot
|
|
38
|
+
|
|
39
|
+
logging.getLogger(__name__).addHandler(logging.NullHandler())
|
|
40
|
+
|
|
41
|
+
__author__ = "Michiel Dubbelman"
|
|
42
|
+
__email__ = "m.p.dubbelman@tudelft.nl"
|
|
43
|
+
__version__ = "0.1.0"
|
|
44
|
+
|
|
45
|
+
__all__ = [
|
|
46
|
+
"EDAData",
|
|
47
|
+
"autocorrelation_plot",
|
|
48
|
+
"bihistogram",
|
|
49
|
+
"block_plot",
|
|
50
|
+
"bootstrap_plot",
|
|
51
|
+
"box_cox_linearity_plot",
|
|
52
|
+
"box_cox_normality_plot",
|
|
53
|
+
"box_plot",
|
|
54
|
+
"complex_demodulation_amplitude_plot",
|
|
55
|
+
"complex_demodulation_phase_plot",
|
|
56
|
+
"contour_plot",
|
|
57
|
+
"doe_mean_plot",
|
|
58
|
+
"doe_scatter_plot",
|
|
59
|
+
"doe_sd_plot",
|
|
60
|
+
"four_plot",
|
|
61
|
+
"histogram",
|
|
62
|
+
"lag_plot",
|
|
63
|
+
"linear_correlation_plot",
|
|
64
|
+
"linear_intercept_plot",
|
|
65
|
+
"linear_residual_sd_plot",
|
|
66
|
+
"linear_slope_plot",
|
|
67
|
+
"mean_plot",
|
|
68
|
+
"normal_probability_plot",
|
|
69
|
+
"ppcc_plot",
|
|
70
|
+
"probability_plot",
|
|
71
|
+
"qq_plot",
|
|
72
|
+
"run_sequence_plot",
|
|
73
|
+
"scatter_plot",
|
|
74
|
+
"sd_plot",
|
|
75
|
+
"six_plot",
|
|
76
|
+
"spectral_plot",
|
|
77
|
+
"star_plot",
|
|
78
|
+
"weibull_plot",
|
|
79
|
+
"youden_plot",
|
|
80
|
+
]
|