edmkit 0.0.17__tar.gz → 0.0.18__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.
- edmkit-0.0.18/PKG-INFO +87 -0
- edmkit-0.0.18/README.md +73 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/pyproject.toml +1 -1
- {edmkit-0.0.17 → edmkit-0.0.18}/pyproject.toml.orig +1 -1
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/simplex_projection/knn.py +13 -17
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/simplex_projection/simplex_projection.py +9 -12
- edmkit-0.0.17/PKG-INFO +0 -77
- edmkit-0.0.17/README.md +0 -63
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/ccm.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/embedding.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/generate/__init__.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/generate/chua.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/generate/ctrnn.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/generate/double_pendulum.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/generate/duffing.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/generate/euler_spiral.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/generate/fitzhugh_nagumo.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/generate/hindmarsh_rose.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/generate/kuramoto.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/generate/lorenz.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/generate/lorenz96.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/generate/lotka_volterra.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/generate/mackey_glass.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/generate/morris_lecar.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/generate/pyloric.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/generate/rk45.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/generate/rossler.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/generate/rulkov_map.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/generate/three_scroll.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/metrics/__init__.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/metrics/mae.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/metrics/pearson_correlation.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/metrics/rmse.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/simplex_projection/__init__.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/simplex_projection/linear_operator.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/simplex_projection/soft.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/simplex_projection/soft_linear_operator.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/smap/__init__.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/smap/coefficients.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/smap/linear_operator.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/smap/smap.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/splits.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/theiler_window.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/types.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/util.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/wavelet/__init__.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/wavelet/continuous.py +0 -0
- {edmkit-0.0.17 → edmkit-0.0.18}/src/edmkit/wavelet/discrete.py +0 -0
edmkit-0.0.18/PKG-INFO
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
|
+
Name: edmkit
|
|
3
|
+
Version: 0.0.18
|
|
4
|
+
Summary: Simple EDM (Empirical Dynamic Modeling) library
|
|
5
|
+
Author: FUJISHIGE TEMMA
|
|
6
|
+
Author-email: FUJISHIGE TEMMA <tenma.x0@gmail.com>
|
|
7
|
+
Requires-Dist: kdtree-rs>=0.3.1
|
|
8
|
+
Requires-Dist: numpy>=2.5.4
|
|
9
|
+
Requires-Dist: scipy>=1.18.1
|
|
10
|
+
Requires-Dist: tinygrad>=0.14.0
|
|
11
|
+
Requires-Dist: tinysolve>=0.3.0
|
|
12
|
+
Requires-Python: >=3.13
|
|
13
|
+
Description-Content-Type: text/markdown
|
|
14
|
+
|
|
15
|
+
# edmkit
|
|
16
|
+
|
|
17
|
+
This library is a collection of tools and utilities that are useful for Empirical Data Modeling (EDM) and related tasks. The library is designed to be fast and lightweight, and easy to use.
|
|
18
|
+
|
|
19
|
+
[benchmarks](./benchmarks)
|
|
20
|
+
|
|
21
|
+

|
|
22
|
+
|
|
23
|
+
[compare.py](./benchmarks/compare.py)
|
|
24
|
+
|
|
25
|
+

|
|
26
|
+
|
|
27
|
+
Measured on an Apple M4 Pro on November 4, 2026. Times are medians from `pytest-benchmark`. Parallel CCM uses 14 workers. Peak memory is process-tree RSS in MiB, sampled separately from timing for each case. It includes the interpreter, input, and worker processes. Summed RSS can count shared pages in more than one process.
|
|
28
|
+
|
|
29
|
+
| simplex N | edmkit [ms] | pyEDM [ms] | speedup | edmkit peak [MiB] | pyEDM peak [MiB] |
|
|
30
|
+
| ---: | ---: | ---: | ---: | ---: | ---: |
|
|
31
|
+
| 500 | 0.17 | 1.5 | 9.0× | 168 | 169 |
|
|
32
|
+
| 1,000 | 0.39 | 2.4 | 6.1× | 169 | 170 |
|
|
33
|
+
| 2,000 | 0.81 | 4.4 | 5.5× | 168 | 170 |
|
|
34
|
+
| 5,000 | 2.2 | 11.5 | 5.3× | 170 | 175 |
|
|
35
|
+
| 10,000 | 4.7 | 23.8 | 5.0× | 172 | 180 |
|
|
36
|
+
| 20,000 | 10.2 | 50.3 | 4.9× | 176 | 193 |
|
|
37
|
+
|
|
38
|
+
| smap N | edmkit [ms] | pyEDM [ms] | speedup | edmkit peak [MiB] | pyEDM peak [MiB] |
|
|
39
|
+
| ---: | ---: | ---: | ---: | ---: | ---: |
|
|
40
|
+
| 500 | 2.1 | 36.6 | 17.9× | 176 | 180 |
|
|
41
|
+
| 1,000 | 8.7 | 128.3 | 14.7× | 192 | 216 |
|
|
42
|
+
| 2,000 | 22.0 | 513.6 | 23.4× | 261 | 357 |
|
|
43
|
+
| 5,000 | 193.9 | 3,376.7 | 17.4× | 744 | 1,344 |
|
|
44
|
+
|
|
45
|
+
| ccm N | edmkit [ms] | pyEDM [ms] | speedup | edmkit parallel [ms] | pyEDM parallel [ms] | speedup |
|
|
46
|
+
| ---: | ---: | ---: | ---: | ---: | ---: | ---: |
|
|
47
|
+
| 500 | 106.4 | 151.7 | 1.4× | 19.5 | 68.0 | 3.5× |
|
|
48
|
+
| 1,000 | 168.4 | 327.0 | 1.9× | 26.3 | 91.9 | 3.5× |
|
|
49
|
+
| 2,000 | 329.7 | 745.1 | 2.3× | 48.8 | 148.3 | 3.0× |
|
|
50
|
+
| 5,000 | 668.9 | 1,945.7 | 2.9× | 97.4 | 397.5 | 4.1× |
|
|
51
|
+
| 10,000 | 1,253.6 | 4,176.7 | 3.3× | 164.6 | 585.4 | 3.6× |
|
|
52
|
+
|
|
53
|
+
| ccm N | edmkit peak [MiB] | pyEDM peak [MiB] | edmkit parallel peak [MiB] | pyEDM parallel peak [MiB] |
|
|
54
|
+
| ---: | ---: | ---: | ---: | ---: |
|
|
55
|
+
| 500 | 171 | 170 | 191 | 1,417 |
|
|
56
|
+
| 1,000 | 173 | 176 | 196 | 1,429 |
|
|
57
|
+
| 2,000 | 179 | 186 | 207 | 1,460 |
|
|
58
|
+
| 5,000 | 204 | 224 | 239 | 1,624 |
|
|
59
|
+
| 10,000 | 230 | 362 | 297 | 1,804 |
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
## Installation
|
|
63
|
+
|
|
64
|
+
To install the library, you can use pip:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
pip install edmkit
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Or you can also use [uv](https://docs.astral.sh/uv/):
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
uv add edmkit
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Testing
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
# Run all tests
|
|
80
|
+
uv run pytest
|
|
81
|
+
|
|
82
|
+
# Skip slow tests
|
|
83
|
+
uv run pytest -m "not slow"
|
|
84
|
+
|
|
85
|
+
# Run with CI profile (more hypothesis examples)
|
|
86
|
+
HYPOTHESIS_PROFILE=ci uv run pytest
|
|
87
|
+
```
|
edmkit-0.0.18/README.md
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# edmkit
|
|
2
|
+
|
|
3
|
+
This library is a collection of tools and utilities that are useful for Empirical Data Modeling (EDM) and related tasks. The library is designed to be fast and lightweight, and easy to use.
|
|
4
|
+
|
|
5
|
+
[benchmarks](./benchmarks)
|
|
6
|
+
|
|
7
|
+

|
|
8
|
+
|
|
9
|
+
[compare.py](./benchmarks/compare.py)
|
|
10
|
+
|
|
11
|
+

|
|
12
|
+
|
|
13
|
+
Measured on an Apple M4 Pro on November 4, 2026. Times are medians from `pytest-benchmark`. Parallel CCM uses 14 workers. Peak memory is process-tree RSS in MiB, sampled separately from timing for each case. It includes the interpreter, input, and worker processes. Summed RSS can count shared pages in more than one process.
|
|
14
|
+
|
|
15
|
+
| simplex N | edmkit [ms] | pyEDM [ms] | speedup | edmkit peak [MiB] | pyEDM peak [MiB] |
|
|
16
|
+
| ---: | ---: | ---: | ---: | ---: | ---: |
|
|
17
|
+
| 500 | 0.17 | 1.5 | 9.0× | 168 | 169 |
|
|
18
|
+
| 1,000 | 0.39 | 2.4 | 6.1× | 169 | 170 |
|
|
19
|
+
| 2,000 | 0.81 | 4.4 | 5.5× | 168 | 170 |
|
|
20
|
+
| 5,000 | 2.2 | 11.5 | 5.3× | 170 | 175 |
|
|
21
|
+
| 10,000 | 4.7 | 23.8 | 5.0× | 172 | 180 |
|
|
22
|
+
| 20,000 | 10.2 | 50.3 | 4.9× | 176 | 193 |
|
|
23
|
+
|
|
24
|
+
| smap N | edmkit [ms] | pyEDM [ms] | speedup | edmkit peak [MiB] | pyEDM peak [MiB] |
|
|
25
|
+
| ---: | ---: | ---: | ---: | ---: | ---: |
|
|
26
|
+
| 500 | 2.1 | 36.6 | 17.9× | 176 | 180 |
|
|
27
|
+
| 1,000 | 8.7 | 128.3 | 14.7× | 192 | 216 |
|
|
28
|
+
| 2,000 | 22.0 | 513.6 | 23.4× | 261 | 357 |
|
|
29
|
+
| 5,000 | 193.9 | 3,376.7 | 17.4× | 744 | 1,344 |
|
|
30
|
+
|
|
31
|
+
| ccm N | edmkit [ms] | pyEDM [ms] | speedup | edmkit parallel [ms] | pyEDM parallel [ms] | speedup |
|
|
32
|
+
| ---: | ---: | ---: | ---: | ---: | ---: | ---: |
|
|
33
|
+
| 500 | 106.4 | 151.7 | 1.4× | 19.5 | 68.0 | 3.5× |
|
|
34
|
+
| 1,000 | 168.4 | 327.0 | 1.9× | 26.3 | 91.9 | 3.5× |
|
|
35
|
+
| 2,000 | 329.7 | 745.1 | 2.3× | 48.8 | 148.3 | 3.0× |
|
|
36
|
+
| 5,000 | 668.9 | 1,945.7 | 2.9× | 97.4 | 397.5 | 4.1× |
|
|
37
|
+
| 10,000 | 1,253.6 | 4,176.7 | 3.3× | 164.6 | 585.4 | 3.6× |
|
|
38
|
+
|
|
39
|
+
| ccm N | edmkit peak [MiB] | pyEDM peak [MiB] | edmkit parallel peak [MiB] | pyEDM parallel peak [MiB] |
|
|
40
|
+
| ---: | ---: | ---: | ---: | ---: |
|
|
41
|
+
| 500 | 171 | 170 | 191 | 1,417 |
|
|
42
|
+
| 1,000 | 173 | 176 | 196 | 1,429 |
|
|
43
|
+
| 2,000 | 179 | 186 | 207 | 1,460 |
|
|
44
|
+
| 5,000 | 204 | 224 | 239 | 1,624 |
|
|
45
|
+
| 10,000 | 230 | 362 | 297 | 1,804 |
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
## Installation
|
|
49
|
+
|
|
50
|
+
To install the library, you can use pip:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
pip install edmkit
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Or you can also use [uv](https://docs.astral.sh/uv/):
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
uv add edmkit
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Testing
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
# Run all tests
|
|
66
|
+
uv run pytest
|
|
67
|
+
|
|
68
|
+
# Skip slow tests
|
|
69
|
+
uv run pytest -m "not slow"
|
|
70
|
+
|
|
71
|
+
# Run with CI profile (more hypothesis examples)
|
|
72
|
+
HYPOTHESIS_PROFILE=ci uv run pytest
|
|
73
|
+
```
|
|
@@ -32,38 +32,34 @@ def knn(X: np.ndarray, Q: np.ndarray, k: int, mask: Mask | None = None) -> tuple
|
|
|
32
32
|
if N < k:
|
|
33
33
|
raise ValueError(f"Not enough points in X to find {k} neighbors, got N={N}")
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
if
|
|
35
|
+
# smaller leaves improve pruning in low dimensions.
|
|
36
|
+
tree = KDTree(X, leafsize=16 if X.shape[-1] <= 8 else 32)
|
|
37
|
+
if mask is None or len(Q) == 0:
|
|
37
38
|
return tree.query(Q, k=k)
|
|
38
39
|
|
|
39
40
|
distances = np.empty((Q.shape[0], k))
|
|
40
41
|
indices = np.empty((Q.shape[0], k), dtype=np.intp)
|
|
41
42
|
|
|
42
|
-
|
|
43
|
-
|
|
43
|
+
pending = np.arange(Q.shape[0])
|
|
44
|
+
k_query = min(k + 1, N)
|
|
44
45
|
|
|
45
|
-
|
|
46
|
-
_distances, _indices = tree.query(Q[pending], k=k_query)
|
|
46
|
+
while pending.size > 0:
|
|
47
|
+
_distances, _indices = tree.query(Q if pending.size == len(Q) else Q[pending], k=k_query)
|
|
47
48
|
|
|
48
|
-
# evaluate the mask and
|
|
49
|
+
# evaluate the mask and keep the first k valid candidates.
|
|
49
50
|
valid = np.broadcast_to(np.asarray(mask(pending[:, None], _indices), dtype=bool), _indices.shape)
|
|
50
51
|
count = valid.sum(axis=-1)
|
|
51
52
|
|
|
52
53
|
if k_query == N and count.min() < k:
|
|
53
54
|
raise ValueError(f"Not enough unmasked points in X to find {k} neighbors, got {count.min()} for some query")
|
|
54
55
|
|
|
55
|
-
# take the first k valid neighbors for the queries that have them
|
|
56
56
|
done = count >= k
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
return pending[~done]
|
|
57
|
+
if done.any():
|
|
58
|
+
first_k = valid & (valid.cumsum(axis=-1, dtype=np.uint32) <= k) & done[:, None]
|
|
59
|
+
distances[pending[done]] = _distances[first_k].reshape(-1, k)
|
|
60
|
+
indices[pending[done]] = _indices[first_k].reshape(-1, k)
|
|
62
61
|
|
|
63
|
-
|
|
64
|
-
pending = fetch(np.arange(Q.shape[0]), k_query)
|
|
65
|
-
while pending.size > 0:
|
|
62
|
+
pending = pending[~done]
|
|
66
63
|
k_query = min(2 * k_query, N)
|
|
67
|
-
pending = fetch(pending, k_query)
|
|
68
64
|
|
|
69
65
|
return distances, indices
|
|
@@ -145,8 +145,6 @@ def _numpy(
|
|
|
145
145
|
# treat the unbatched case as a single batch
|
|
146
146
|
if X.ndim == 2:
|
|
147
147
|
X, Y, Q = X[None], Y[None], Q[None]
|
|
148
|
-
if mask is not None:
|
|
149
|
-
mask = lambda _, *index, mask=mask: mask(*index)
|
|
150
148
|
|
|
151
149
|
B, _, E = X.shape
|
|
152
150
|
M = Q.shape[1]
|
|
@@ -154,19 +152,18 @@ def _numpy(
|
|
|
154
152
|
if k <= 0:
|
|
155
153
|
raise ValueError(f"k must be positive, got k={k}")
|
|
156
154
|
|
|
157
|
-
|
|
158
|
-
indices = np.empty((B, M, k), dtype=np.intp)
|
|
155
|
+
predictions = np.empty((B, M, Y.shape[-1]), dtype=np.result_type(np.float64, Y.dtype))
|
|
159
156
|
for b in range(B):
|
|
160
|
-
distances
|
|
157
|
+
distances, indices = knn(X[b], Q[b], k, partial(mask, b) if return_ndim == 3 and mask is not None else mask)
|
|
161
158
|
|
|
162
|
-
|
|
163
|
-
|
|
159
|
+
# Neighbors are sorted. Clamp the scale and reuse the distance buffer.
|
|
160
|
+
d_min = np.fmax(distances[:, :1], 1e-6)
|
|
161
|
+
np.divide(distances, -d_min, out=distances)
|
|
162
|
+
weights = np.exp(distances, out=distances)
|
|
164
163
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
predictions = np.matmul(weights[..., None, :], Y_neighbors).squeeze(-2) / weights.sum(axis=-1, keepdims=True) # (B, M, E')
|
|
164
|
+
prediction = predictions[b]
|
|
165
|
+
np.matmul(weights[:, None, :], Y[b, indices], out=prediction[:, None, :])
|
|
166
|
+
prediction /= weights.sum(axis=-1, keepdims=True)
|
|
170
167
|
|
|
171
168
|
if return_ndim == 1:
|
|
172
169
|
return predictions[0, :, 0] # (M,)
|
edmkit-0.0.17/PKG-INFO
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.3
|
|
2
|
-
Name: edmkit
|
|
3
|
-
Version: 0.0.17
|
|
4
|
-
Summary: Simple EDM (Empirical Dynamic Modeling) library
|
|
5
|
-
Author: FUJISHIGE TEMMA
|
|
6
|
-
Author-email: FUJISHIGE TEMMA <tenma.x0@gmail.com>
|
|
7
|
-
Requires-Dist: kdtree-rs>=0.3.1
|
|
8
|
-
Requires-Dist: numpy>=2.5.4
|
|
9
|
-
Requires-Dist: scipy>=1.18.1
|
|
10
|
-
Requires-Dist: tinygrad>=0.14.0
|
|
11
|
-
Requires-Dist: tinysolve>=0.3.0
|
|
12
|
-
Requires-Python: >=3.13
|
|
13
|
-
Description-Content-Type: text/markdown
|
|
14
|
-
|
|
15
|
-
# edmkit
|
|
16
|
-
|
|
17
|
-
This library is a collection of tools and utilities that are useful for Empirical Data Modeling (EDM) and related tasks. The library is designed to be fast and lightweight, and easy to use.
|
|
18
|
-
|
|
19
|
-
[benchmarks](./benchmarks)
|
|
20
|
-
|
|
21
|
-

|
|
22
|
-
|
|
23
|
-
[compare.py](./benchmarks/compare.py)
|
|
24
|
-
|
|
25
|
-

|
|
26
|
-
|
|
27
|
-
| simplex N | edmkit [ms] | pyEDM [ms] | speedup |
|
|
28
|
-
|---:|---:|---:|---:|
|
|
29
|
-
| 500 | 0.2 | 1.4 | 8x |
|
|
30
|
-
| 1,000 | 0.4 | 2.3 | 5x |
|
|
31
|
-
| 2,000 | 0.9 | 4.2 | 5x |
|
|
32
|
-
| 5,000 | 2.3 | 10.7 | 5x |
|
|
33
|
-
| 10,000 | 4.9 | 22.8 | 5x |
|
|
34
|
-
| 20,000 | 10.3 | 46.8 | 5x |
|
|
35
|
-
|
|
36
|
-
| smap N | edmkit [ms] | pyEDM [ms] | speedup |
|
|
37
|
-
|---:|---:|---:|---:|
|
|
38
|
-
| 500 | 1.9 | 38.0 | 20x |
|
|
39
|
-
| 1,000 | 7.5 | 132.1 | 18x |
|
|
40
|
-
| 2,000 | 21.6 | 522.6 | 24x |
|
|
41
|
-
| 5,000 | 183.7 | 3,364 | 18x |
|
|
42
|
-
|
|
43
|
-
| ccm N | edmkit [ms] | pyEDM [ms] | speedup | edmkit parallel [ms] | pyEDM parallel [ms] | speedup |
|
|
44
|
-
|---:|---:|---:|---:|---:|---:|---:|
|
|
45
|
-
| 500 | 116.7 | 148.4 | 1.3x | 22.0 | 64.5 | 2.9x |
|
|
46
|
-
| 1,000 | 197.1 | 316.8 | 1.6x | 31.8 | 89.7 | 2.8x |
|
|
47
|
-
| 2,000 | 382.8 | 696.8 | 1.8x | 58.6 | 133.8 | 2.3x |
|
|
48
|
-
| 5,000 | 788.0 | 1,863 | 2.4x | 108.9 | 283.5 | 2.6x |
|
|
49
|
-
| 10,000 | 1,470 | 4,166 | 2.8x | 197.0 | 558.9 | 2.8x |
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
## Installation
|
|
53
|
-
|
|
54
|
-
To install the library, you can use pip:
|
|
55
|
-
|
|
56
|
-
```bash
|
|
57
|
-
pip install edmkit
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
Or you can also use [uv](https://docs.astral.sh/uv/):
|
|
61
|
-
|
|
62
|
-
```bash
|
|
63
|
-
uv add edmkit
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
## Testing
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
# Run all tests
|
|
70
|
-
uv run pytest
|
|
71
|
-
|
|
72
|
-
# Skip slow tests
|
|
73
|
-
uv run pytest -m "not slow"
|
|
74
|
-
|
|
75
|
-
# Run with CI profile (more hypothesis examples)
|
|
76
|
-
HYPOTHESIS_PROFILE=ci uv run pytest
|
|
77
|
-
```
|
edmkit-0.0.17/README.md
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
# edmkit
|
|
2
|
-
|
|
3
|
-
This library is a collection of tools and utilities that are useful for Empirical Data Modeling (EDM) and related tasks. The library is designed to be fast and lightweight, and easy to use.
|
|
4
|
-
|
|
5
|
-
[benchmarks](./benchmarks)
|
|
6
|
-
|
|
7
|
-

|
|
8
|
-
|
|
9
|
-
[compare.py](./benchmarks/compare.py)
|
|
10
|
-
|
|
11
|
-

|
|
12
|
-
|
|
13
|
-
| simplex N | edmkit [ms] | pyEDM [ms] | speedup |
|
|
14
|
-
|---:|---:|---:|---:|
|
|
15
|
-
| 500 | 0.2 | 1.4 | 8x |
|
|
16
|
-
| 1,000 | 0.4 | 2.3 | 5x |
|
|
17
|
-
| 2,000 | 0.9 | 4.2 | 5x |
|
|
18
|
-
| 5,000 | 2.3 | 10.7 | 5x |
|
|
19
|
-
| 10,000 | 4.9 | 22.8 | 5x |
|
|
20
|
-
| 20,000 | 10.3 | 46.8 | 5x |
|
|
21
|
-
|
|
22
|
-
| smap N | edmkit [ms] | pyEDM [ms] | speedup |
|
|
23
|
-
|---:|---:|---:|---:|
|
|
24
|
-
| 500 | 1.9 | 38.0 | 20x |
|
|
25
|
-
| 1,000 | 7.5 | 132.1 | 18x |
|
|
26
|
-
| 2,000 | 21.6 | 522.6 | 24x |
|
|
27
|
-
| 5,000 | 183.7 | 3,364 | 18x |
|
|
28
|
-
|
|
29
|
-
| ccm N | edmkit [ms] | pyEDM [ms] | speedup | edmkit parallel [ms] | pyEDM parallel [ms] | speedup |
|
|
30
|
-
|---:|---:|---:|---:|---:|---:|---:|
|
|
31
|
-
| 500 | 116.7 | 148.4 | 1.3x | 22.0 | 64.5 | 2.9x |
|
|
32
|
-
| 1,000 | 197.1 | 316.8 | 1.6x | 31.8 | 89.7 | 2.8x |
|
|
33
|
-
| 2,000 | 382.8 | 696.8 | 1.8x | 58.6 | 133.8 | 2.3x |
|
|
34
|
-
| 5,000 | 788.0 | 1,863 | 2.4x | 108.9 | 283.5 | 2.6x |
|
|
35
|
-
| 10,000 | 1,470 | 4,166 | 2.8x | 197.0 | 558.9 | 2.8x |
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
## Installation
|
|
39
|
-
|
|
40
|
-
To install the library, you can use pip:
|
|
41
|
-
|
|
42
|
-
```bash
|
|
43
|
-
pip install edmkit
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
Or you can also use [uv](https://docs.astral.sh/uv/):
|
|
47
|
-
|
|
48
|
-
```bash
|
|
49
|
-
uv add edmkit
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
## Testing
|
|
53
|
-
|
|
54
|
-
```bash
|
|
55
|
-
# Run all tests
|
|
56
|
-
uv run pytest
|
|
57
|
-
|
|
58
|
-
# Skip slow tests
|
|
59
|
-
uv run pytest -m "not slow"
|
|
60
|
-
|
|
61
|
-
# Run with CI profile (more hypothesis examples)
|
|
62
|
-
HYPOTHESIS_PROFILE=ci uv run pytest
|
|
63
|
-
```
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|