vector-mtrl 0.2.0__py3-none-any.whl
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.
- mtrl/__init__.py +144 -0
- mtrl/_alignment_report.py +105 -0
- mtrl/_archive_documents.py +73 -0
- mtrl/_archive_integrity.py +539 -0
- mtrl/_archive_loading.py +1070 -0
- mtrl/_archive_serialise.py +696 -0
- mtrl/_candidate_matching.py +216 -0
- mtrl/_cli.py +28 -0
- mtrl/_disclosure.py +735 -0
- mtrl/_ingestion_shortcuts.py +99 -0
- mtrl/_install_targets.py +36 -0
- mtrl/_optional.py +38 -0
- mtrl/_provenance.py +32 -0
- mtrl/_receipts.py +211 -0
- mtrl/_record_resolution.py +60 -0
- mtrl/_replay_plan.py +557 -0
- mtrl/_replay_run.py +734 -0
- mtrl/_run_management.py +400 -0
- mtrl/_source_capture.py +507 -0
- mtrl/_table_plan.py +271 -0
- mtrl/_table_provenance.py +387 -0
- mtrl/_table_values.py +188 -0
- mtrl/_transform_apply.py +223 -0
- mtrl/_transform_validation.py +1367 -0
- mtrl/archive/__init__.py +54 -0
- mtrl/archive/canonical.py +45 -0
- mtrl/archive/codecs.py +88 -0
- mtrl/archive/dtypes.py +39 -0
- mtrl/archive/reader.py +945 -0
- mtrl/archive/validation.py +1872 -0
- mtrl/connectors/__init__.py +1 -0
- mtrl/connectors/protocols.py +84 -0
- mtrl/disclosure.py +273 -0
- mtrl/domain/__init__.py +129 -0
- mtrl/domain/archive_limits.py +46 -0
- mtrl/domain/committed_values.py +539 -0
- mtrl/domain/frozen_containers.py +168 -0
- mtrl/domain/identities.py +174 -0
- mtrl/domain/provenance.py +448 -0
- mtrl/domain/records.py +233 -0
- mtrl/domain/revisions.py +121 -0
- mtrl/domain/source.py +13 -0
- mtrl/domain/verification.py +302 -0
- mtrl/excel.py +139 -0
- mtrl/exceptions.py +215 -0
- mtrl/exports.py +326 -0
- mtrl/features.py +251 -0
- mtrl/frames.py +228 -0
- mtrl/grids.py +1172 -0
- mtrl/integrity/__init__.py +143 -0
- mtrl/integrity/canonical.py +511 -0
- mtrl/integrity/digests.py +363 -0
- mtrl/integrity/manifest.py +631 -0
- mtrl/integrity/receipts.py +771 -0
- mtrl/integrity/verification.py +1303 -0
- mtrl/models.py +952 -0
- mtrl/mtrl.py +1852 -0
- mtrl/operations/__init__.py +36 -0
- mtrl/operations/_identity.py +17 -0
- mtrl/operations/_validation.py +106 -0
- mtrl/operations/arithmetic.py +207 -0
- mtrl/operations/base.py +292 -0
- mtrl/operations/resampling.py +203 -0
- mtrl/operations/resampling_scipy.py +138 -0
- mtrl/operations/spectra.py +58 -0
- mtrl/processing/__init__.py +23 -0
- mtrl/processing/_table_capture.py +341 -0
- mtrl/processing/limits.py +9 -0
- mtrl/processing/registry.py +1533 -0
- mtrl/protocols.py +13 -0
- mtrl/py.typed +0 -0
- mtrl/replay.py +946 -0
- mtrl/tables.py +1365 -0
- mtrl/transformations/__init__.py +22 -0
- mtrl/transformations/base.py +17 -0
- mtrl/units.py +60 -0
- vector_mtrl-0.2.0.dist-info/METADATA +142 -0
- vector_mtrl-0.2.0.dist-info/RECORD +81 -0
- vector_mtrl-0.2.0.dist-info/WHEEL +4 -0
- vector_mtrl-0.2.0.dist-info/licenses/LICENSE +373 -0
- vector_mtrl-0.2.0.dist-info/licenses/NOTICE +30 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""Compatibility shim for the transformation interface.
|
|
2
|
+
|
|
3
|
+
The live code moved to `mtrl.operations`. The `mtrl.transformations` import path stays
|
|
4
|
+
available until Stage 3.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from importlib import import_module
|
|
8
|
+
from typing import TYPE_CHECKING, Any
|
|
9
|
+
|
|
10
|
+
__all__ = ["DEFAULT_PARAMETERS", "TRANSFORMATIONS", "apply"]
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from mtrl.operations.base import DEFAULT_PARAMETERS, TRANSFORMATIONS, apply
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def __getattr__(name: str) -> Any:
|
|
17
|
+
"""Load the compatibility transformation interface only when a caller requests it."""
|
|
18
|
+
if name not in __all__:
|
|
19
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
20
|
+
|
|
21
|
+
base_module = import_module("mtrl.operations.base")
|
|
22
|
+
return getattr(base_module, name)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"""Compatibility re-export of the transformation base module.
|
|
2
|
+
|
|
3
|
+
The live code moved to `mtrl.operations.base`. This shim keeps the documented
|
|
4
|
+
`mtrl.transformations.base` import path working until Stage 3.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from mtrl._provenance import _hash_function
|
|
8
|
+
from mtrl.operations._identity import identity
|
|
9
|
+
from mtrl.operations.base import DEFAULT_PARAMETERS, TRANSFORMATIONS, apply
|
|
10
|
+
|
|
11
|
+
__all__ = [
|
|
12
|
+
"DEFAULT_PARAMETERS",
|
|
13
|
+
"TRANSFORMATIONS",
|
|
14
|
+
"_hash_function",
|
|
15
|
+
"apply",
|
|
16
|
+
"identity",
|
|
17
|
+
]
|
mtrl/units.py
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"""Units of measure for the Mtrl package, against the QUDT standard.
|
|
2
|
+
|
|
3
|
+
QUDT (Quantities, Units, Dimensions and Types) gives every unit a stable term. This package
|
|
4
|
+
keeps the reader's own text with that term. A unit that this package cannot match stays in
|
|
5
|
+
the record.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from pydantic import BaseModel, ConfigDict
|
|
9
|
+
|
|
10
|
+
QUDT_TERMS_BY_RAW_UNIT: dict[str, tuple[str, str]] = {
|
|
11
|
+
"cm⁻¹": ("PER-CentiM", "InverseLength"),
|
|
12
|
+
"cm^-1": ("PER-CentiM", "InverseLength"),
|
|
13
|
+
"1/cm": ("PER-CentiM", "InverseLength"),
|
|
14
|
+
"s": ("SEC", "Time"),
|
|
15
|
+
"second": ("SEC", "Time"),
|
|
16
|
+
"a.u.": ("UNITLESS", "Dimensionless"),
|
|
17
|
+
}
|
|
18
|
+
"""QUDT terms for each spelling of a unit that a reader can report.
|
|
19
|
+
|
|
20
|
+
Each value holds the QUDT unit and the QUDT quantity kind. Each entry holds one spelling,
|
|
21
|
+
because a reader can spell the same unit in more than one way.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
# @lat: [[domain-model#Units of measure]]
|
|
26
|
+
class Unit(BaseModel):
|
|
27
|
+
"""A unit of measure, as a reader reported it and as QUDT identifies it.
|
|
28
|
+
|
|
29
|
+
A Unit is frozen. A checkpoint and the checkpoints that come from it can share one
|
|
30
|
+
Unit. Replace a Unit when a checkpoint must hold a different one.
|
|
31
|
+
|
|
32
|
+
Attributes:
|
|
33
|
+
raw: The unit as the reader reported it, e.g. "cm⁻¹".
|
|
34
|
+
qudt_unit: The local name of the QUDT unit, if known, e.g. "PER-CentiM". It gives
|
|
35
|
+
the measure of the quantity.
|
|
36
|
+
qudt_quantity_kind: The local name of the QUDT quantity kind, if known, e.g.
|
|
37
|
+
"InverseLength". It names the property.
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
model_config = ConfigDict(frozen=True)
|
|
41
|
+
|
|
42
|
+
raw: str
|
|
43
|
+
qudt_unit: str | None = None
|
|
44
|
+
qudt_quantity_kind: str | None = None
|
|
45
|
+
|
|
46
|
+
@classmethod
|
|
47
|
+
def from_raw(cls, raw_unit: str | None) -> Unit | None:
|
|
48
|
+
"""Build a Unit from the text that a reader reported for a unit.
|
|
49
|
+
|
|
50
|
+
Args:
|
|
51
|
+
raw_unit: The unit as the reader reported it, e.g. "cm⁻¹".
|
|
52
|
+
|
|
53
|
+
Returns:
|
|
54
|
+
A Unit that holds `raw_unit`, and the QUDT terms where this package knows them.
|
|
55
|
+
None, when `raw_unit` is empty or absent.
|
|
56
|
+
"""
|
|
57
|
+
if not raw_unit:
|
|
58
|
+
return None
|
|
59
|
+
qudt_unit, qudt_quantity_kind = QUDT_TERMS_BY_RAW_UNIT.get(raw_unit, (None, None))
|
|
60
|
+
return cls(raw=raw_unit, qudt_unit=qudt_unit, qudt_quantity_kind=qudt_quantity_kind)
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: vector-mtrl
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Materials research tools for spectra and archive workflows.
|
|
5
|
+
Author-email: Fuzzy Labs <info@fuzzylabs.ai>
|
|
6
|
+
License-Expression: MPL-2.0
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
License-File: NOTICE
|
|
9
|
+
Requires-Python: <4.0,>=3.14
|
|
10
|
+
Requires-Dist: numpy>=2.5.2
|
|
11
|
+
Requires-Dist: pydantic>=2.13.4
|
|
12
|
+
Requires-Dist: rfc8785==0.1.4
|
|
13
|
+
Provides-Extra: excel
|
|
14
|
+
Requires-Dist: openpyxl>=3.1.5; extra == 'excel'
|
|
15
|
+
Requires-Dist: pandas>=3.0.5; extra == 'excel'
|
|
16
|
+
Provides-Extra: interp
|
|
17
|
+
Requires-Dist: scipy>=1.16; extra == 'interp'
|
|
18
|
+
Provides-Extra: tabular
|
|
19
|
+
Requires-Dist: pandas>=3.0.5; extra == 'tabular'
|
|
20
|
+
Description-Content-Type: text/markdown
|
|
21
|
+
|
|
22
|
+
# vector-mtrl
|
|
23
|
+
|
|
24
|
+
`mtrl` reads, checks, and writes materials data archives. It records each scientific result as an
|
|
25
|
+
immutable record with exact lineage.
|
|
26
|
+
|
|
27
|
+
## What you get
|
|
28
|
+
|
|
29
|
+
- Immutable committed records with stable identities and complete lineage.
|
|
30
|
+
- Bounded `.mtrl` archives with an integrity manifest, external receipts, and forensic inspection.
|
|
31
|
+
- NumPy-only operations: identity, scale, offset, peak normalisation, zero-at-point, and linear
|
|
32
|
+
resample, beside mean and median aggregates.
|
|
33
|
+
- Explicit analysis grids and a read-only alignment report.
|
|
34
|
+
- A read-only replay plan, a capability view, and a detached rerun for committed chains.
|
|
35
|
+
- Author disclosure that stays inert: stored environment records and passive source bundles that
|
|
36
|
+
MTRL never imports or executes.
|
|
37
|
+
- CSV export without pandas.
|
|
38
|
+
- Optional extras add SciPy resampling, pandas conversion, and Excel export.
|
|
39
|
+
|
|
40
|
+
## Install
|
|
41
|
+
|
|
42
|
+
`vector-mtrl` requires Python 3.14 or newer, below Python 4. The base install depends only on
|
|
43
|
+
NumPy, Pydantic, and RFC 8785 canonical JSON. Create one environment and install the core:
|
|
44
|
+
|
|
45
|
+
```sh
|
|
46
|
+
uv venv --python 3.14
|
|
47
|
+
uv pip install --python .venv/bin/python vector-mtrl
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Quick start
|
|
51
|
+
|
|
52
|
+
Commit one synthetic spectrum, normalise it, save an archive, verify it, load it, and export
|
|
53
|
+
CSV. The base install alone runs every step.
|
|
54
|
+
|
|
55
|
+
### Example: Quick start
|
|
56
|
+
|
|
57
|
+
**Required install:** `vector-mtrl`
|
|
58
|
+
|
|
59
|
+
```python
|
|
60
|
+
from pathlib import Path
|
|
61
|
+
from tempfile import TemporaryDirectory
|
|
62
|
+
|
|
63
|
+
import numpy as np
|
|
64
|
+
|
|
65
|
+
from mtrl import InstrumentRun, MaterialData, Mtrl, verify_archive
|
|
66
|
+
|
|
67
|
+
application = Mtrl(sample_id="sample-01")
|
|
68
|
+
run = InstrumentRun(run_name="replicate-01")
|
|
69
|
+
axis = np.array([2000.0, 2100.0, 2200.0])
|
|
70
|
+
content = np.empty(axis.size, dtype=[("wavenumber", "<f8"), ("absorbance", "<f8")])
|
|
71
|
+
content["wavenumber"] = axis
|
|
72
|
+
content["absorbance"] = [0.1, 0.2, 0.3]
|
|
73
|
+
checkpoint = MaterialData(
|
|
74
|
+
content=content,
|
|
75
|
+
type="raw",
|
|
76
|
+
checkpoint_name="spectrum",
|
|
77
|
+
)
|
|
78
|
+
run.add_checkpoint(checkpoint)
|
|
79
|
+
application.add(run)
|
|
80
|
+
|
|
81
|
+
normalised = application.transform(
|
|
82
|
+
run.run_id,
|
|
83
|
+
checkpoint.checkpoint_id,
|
|
84
|
+
"normalise_peak",
|
|
85
|
+
)
|
|
86
|
+
print(normalised.lineage.provenance.qualified_identifier)
|
|
87
|
+
|
|
88
|
+
with TemporaryDirectory() as directory:
|
|
89
|
+
archive_path = application.save(Path(directory) / "sample.mtrl")
|
|
90
|
+
verification = verify_archive(archive_path)
|
|
91
|
+
print(verification.structural_status.value, verification.hash_status.value)
|
|
92
|
+
|
|
93
|
+
loaded = Mtrl.load(archive_path)
|
|
94
|
+
print(loaded.sample_id, loaded.get_run(run.run_id) is not None)
|
|
95
|
+
csv_path = loaded.export_checkpoint(
|
|
96
|
+
run.run_id,
|
|
97
|
+
normalised.checkpoint_id,
|
|
98
|
+
Path(directory) / "signal.csv",
|
|
99
|
+
)
|
|
100
|
+
exported = np.genfromtxt(csv_path, delimiter=",", names=True)
|
|
101
|
+
np.testing.assert_allclose(exported["absorbance"], [1 / 3, 2 / 3, 1])
|
|
102
|
+
print(csv_path.is_file())
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
`Mtrl.add()` commits a detached copy, so later changes to your arrays cannot alter the record.
|
|
106
|
+
Every mutation, including the transform above, creates one new revision.
|
|
107
|
+
|
|
108
|
+
## Guides
|
|
109
|
+
|
|
110
|
+
The expanded guides ship in the source archive under `docs/user/`. Download the archive for a
|
|
111
|
+
release from https://pypi.org/project/vector-mtrl/#files, then read:
|
|
112
|
+
|
|
113
|
+
- `docs/user/getting-started.md` for installation, first records, and the save, load, verify,
|
|
114
|
+
and export loop.
|
|
115
|
+
- `docs/user/workflows.md` for corrections, replacements, transforms, resampling, aggregates,
|
|
116
|
+
alignment reports, replay, receipts, forensic inspection, disclosure, exports, and registry
|
|
117
|
+
control.
|
|
118
|
+
- `docs/user/reference.md` for every public route, the stable typed imports, the exact
|
|
119
|
+
package-root export list, registry names, format features, and the archive safety contract.
|
|
120
|
+
|
|
121
|
+
## Archive and provenance limits
|
|
122
|
+
|
|
123
|
+
MTRL reads `.mtrl` archives inside configured size and member limits, and it validates paths,
|
|
124
|
+
entries, JSON, references, payloads, and integrity before it returns data. It does not extract
|
|
125
|
+
archive files.
|
|
126
|
+
|
|
127
|
+
Archive content does not install packages, does not import operation code, does not change a
|
|
128
|
+
registry, does not execute stored source, and does not change committed records directly.
|
|
129
|
+
Committed records are immutable: use `Mtrl` methods to create a new record version or change the
|
|
130
|
+
active view.
|
|
131
|
+
|
|
132
|
+
New archives require integrity coverage. Keep a receipt outside the archive if you need to
|
|
133
|
+
detect a complete rewrite. A receipt has no signature, so send it through a separate trusted
|
|
134
|
+
channel. `forensic_inspect()` reports damaged archive facts, but it does not return damaged data
|
|
135
|
+
for normal analysis. MTRL verifies digests and never verifies your execution environment:
|
|
136
|
+
environment records are author claims, not checked facts.
|
|
137
|
+
|
|
138
|
+
## Licence
|
|
139
|
+
|
|
140
|
+
The core is licensed under the MPL-2.0. Read the licence text in `LICENSE` and the inherited
|
|
141
|
+
notices in `NOTICE`, both included in this distribution. The upstream licence reference is
|
|
142
|
+
https://www.mozilla.org/en-US/MPL/2.0/.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
mtrl/__init__.py,sha256=tLPY9zhx4iOM58s9LjZwGXK-8u4jIFm9W1q-DlXxIh8,3466
|
|
2
|
+
mtrl/_alignment_report.py,sha256=bG6ZLOPq2-AxibIVyt0w0565aX-MTDu9CqMMbGQzgJs,3968
|
|
3
|
+
mtrl/_archive_documents.py,sha256=LKED-bIXLcFof2x05zyi0-CM56EU-enEyyruEaqM8QQ,2726
|
|
4
|
+
mtrl/_archive_integrity.py,sha256=59ew1H8L6wGq7rUtqIrRrXvI6ii71G7QDrqcnKofA5M,22398
|
|
5
|
+
mtrl/_archive_loading.py,sha256=O-UE0dTSTAQ0rM_KZasz6XZPP0OIDDBm8pDNqMah9L4,40661
|
|
6
|
+
mtrl/_archive_serialise.py,sha256=4_4hCNOGRx8E-iX10fRNJ_RqOFrJfEpVE2uPMbx82mc,27326
|
|
7
|
+
mtrl/_candidate_matching.py,sha256=lO3Vo6tiTuuzM7zwds9pArxfhfQda4zKg9vkijRNmtI,8141
|
|
8
|
+
mtrl/_cli.py,sha256=iXeU82meXI3lNkv-_r9w-3mPJ5RTFHjuFjSKqr6GFcA,1134
|
|
9
|
+
mtrl/_disclosure.py,sha256=94s_ZZ0yxUr-Qz85We6wVHHqdH7xI49rGz6Id4MriE8,27468
|
|
10
|
+
mtrl/_ingestion_shortcuts.py,sha256=7YLJTUcM1egkwaqWdnm96oc_n3kwxuy8jHKpaWdbQsY,3004
|
|
11
|
+
mtrl/_install_targets.py,sha256=CX4IYKe1gVM22wAqHpAUeoZl3uD8Si1k3UWjk9Hu7zQ,1555
|
|
12
|
+
mtrl/_optional.py,sha256=RWEw_7kOft_szNzRjyhXmImQ_d0sTDHPaRRm5HLRYrQ,1149
|
|
13
|
+
mtrl/_provenance.py,sha256=8q_dqrfDe6UXSFTArSZklneaYDgkgUbJ2QCigcOpJMM,934
|
|
14
|
+
mtrl/_receipts.py,sha256=jnPSSoYVZAafs5cqrzqjZA4esQUUV1oHqYZtW7wk6Ac,7098
|
|
15
|
+
mtrl/_record_resolution.py,sha256=1nofqch_08dRaeC6ZKYD6lYJiZ5GkK0SyJgzL50VEdw,2119
|
|
16
|
+
mtrl/_replay_plan.py,sha256=hhel0fdwWVFK_BnFwQLwA5j6oY857dqDoBsM7wzsWHA,20846
|
|
17
|
+
mtrl/_replay_run.py,sha256=-C8itb59j7pBbUvyx0YezjcshsmVfZHsKD2TyQXI2nk,27563
|
|
18
|
+
mtrl/_run_management.py,sha256=S3ou2IhF2fLFTMf8RcBkFfuKsaX8T8MPj-bYwAnuLEM,15228
|
|
19
|
+
mtrl/_source_capture.py,sha256=iLRD_MEJUlrZ6xx4RprpHO1TeUEcd9qi-RAFzj5gGpI,19547
|
|
20
|
+
mtrl/_table_plan.py,sha256=gt2S2kb6ahz0xAtWWMDCauW4TlyqQSdo6996e3zCBgI,10623
|
|
21
|
+
mtrl/_table_provenance.py,sha256=OcHuzWY9XNGsIIc2DfLDjPHqe8VG7yBXw1UomGaa_XI,13099
|
|
22
|
+
mtrl/_table_values.py,sha256=Arg_eMS3-YRwEJ3GOm3HnF_iJn88-kkrcAVwIpCnjPg,6095
|
|
23
|
+
mtrl/_transform_apply.py,sha256=28LtcDyhEzHVIN0EL-bLgwgCNrOc9BvODcxn9XM3QbQ,8460
|
|
24
|
+
mtrl/_transform_validation.py,sha256=956GQzynbks1BtJaIkW50EccpsDlm7img_Zw6dThc5Y,53238
|
|
25
|
+
mtrl/disclosure.py,sha256=JJ7tHFmQB2V68O-ZKmf-M8cc6TOPOTJKfs3FWjuVOeU,10724
|
|
26
|
+
mtrl/excel.py,sha256=diFhLjNRHCzzQCEuq67nubwgPbH9x36Bg2SzMMG3HLo,5103
|
|
27
|
+
mtrl/exceptions.py,sha256=6Ey2RODweeRdCD0IKuU_xSWtE1ULqMO9unGx-WfQ0ps,6623
|
|
28
|
+
mtrl/exports.py,sha256=QnyJLv4eUYls2lpc4EFsm-HOREkJDZ1BWeIgBa-TTWk,11620
|
|
29
|
+
mtrl/features.py,sha256=Rj8sVrCNtT7f1j15PfesucuTxv3cuE3P0pl4tr9XRrA,9176
|
|
30
|
+
mtrl/frames.py,sha256=0aSKz_up6CKqosXK9uGgvY-nnU59gu0sStydV-4DRWc,8645
|
|
31
|
+
mtrl/grids.py,sha256=Z6fL8JAtC683DKlcF3NRdCEMWzW1c7n7rYBnHqpLfoM,46273
|
|
32
|
+
mtrl/models.py,sha256=99LADTjHK8QTsUUTtH8ZzFTpOTZsa21b-bP2UimPzZo,38276
|
|
33
|
+
mtrl/mtrl.py,sha256=sKR82KxR3K5fWCDtZ_N2aKv4R0OR1AJbdoevYxBYqNs,75655
|
|
34
|
+
mtrl/protocols.py,sha256=nxOJ-i9_-gweg3gHzt_QSnDg_AQ9o2qAZC5dhN8gkfw,379
|
|
35
|
+
mtrl/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
36
|
+
mtrl/replay.py,sha256=Tx6QY2JiH9-Oo-zcySGcFYu0GkY5V4MhvF4nINZR1LA,36022
|
|
37
|
+
mtrl/tables.py,sha256=gyZ-CYhciQIuKb2-hapFLWzbbogqDwkK5Xgiof2dPb8,48078
|
|
38
|
+
mtrl/units.py,sha256=ztsuwT3MiYfxyDwjuMN6Z1NIdayxHUIYHMgW_bLkjE8,2278
|
|
39
|
+
mtrl/archive/__init__.py,sha256=IFyiR-3Jzm-y-kJvpQgRM27Ux4L3lgI7ZTB-Nx0qJWY,1411
|
|
40
|
+
mtrl/archive/canonical.py,sha256=yXIw_H5nDBpIDyziEdb4Pu1cWiAbk6kj5gZauJGdQlw,1113
|
|
41
|
+
mtrl/archive/codecs.py,sha256=DRJSR-S_RRQsGDex6z9TOk6mbWOZYHJJ8T0C00rKiaU,2497
|
|
42
|
+
mtrl/archive/dtypes.py,sha256=_ZQBf4GAiTGQ_X3DlDg5y11O0TwlqsqRnE3f4e8l4Yk,1048
|
|
43
|
+
mtrl/archive/reader.py,sha256=k89bdeeVjTqQ3_LEZbPZ3o8rq-yS7QmFRsSVb2VZRCc,38162
|
|
44
|
+
mtrl/archive/validation.py,sha256=LhT3wsFt2lDtwxvEeRcZTX3Eymx_-tNZAX-uRtsxwfg,75061
|
|
45
|
+
mtrl/connectors/__init__.py,sha256=0Tx9emLVyKUTZzQOYuc7jpEQl9BOBB6USDPyy4VcL70,67
|
|
46
|
+
mtrl/connectors/protocols.py,sha256=IiFeTOLD9K4SSWxUU99FrCTqiyKzZ7lMhZ7uWd_aivk,2862
|
|
47
|
+
mtrl/domain/__init__.py,sha256=VPBTGm51VfYNxrMvJjxGn1VNIllNoGnAJlxVZuGBqTE,3015
|
|
48
|
+
mtrl/domain/archive_limits.py,sha256=osfZt4OY9YfldaBcnKhizRSXvZZmnajTE5TXZbCKNJw,1845
|
|
49
|
+
mtrl/domain/committed_values.py,sha256=q0OJzWL3rXb6u34KLSezD_XJTH_DIEOmOIakFcY0khE,18583
|
|
50
|
+
mtrl/domain/frozen_containers.py,sha256=nNljqJADnAnyb79adypqmMtjJQw3cpy85gfMuP8JGkw,5916
|
|
51
|
+
mtrl/domain/identities.py,sha256=rvfTFwtn-src18D6-F4fLFjJKTzzUgd45yPCX6pPKcI,4831
|
|
52
|
+
mtrl/domain/provenance.py,sha256=f0Ecl8p_942acI33HKJPWVx_1CeSwX25W191N_MW-jc,18533
|
|
53
|
+
mtrl/domain/records.py,sha256=Aa1PGqIj6ME7aYZkxCcUNLdX6dsjKpEDfLZ4HG1atRw,9725
|
|
54
|
+
mtrl/domain/revisions.py,sha256=jLZCUpniLXlU6y4yJMwM84cGTO7d8Sy-2K22UFeGMaY,4621
|
|
55
|
+
mtrl/domain/source.py,sha256=WDhqjGYDOrYvvf3AYzdgL_AWHuQPQQ9EEtt7AtVOgso,243
|
|
56
|
+
mtrl/domain/verification.py,sha256=fOAHtweDZzm7OxN11pRexbGddtoiq4vf3lcIj-Qw-Tk,9968
|
|
57
|
+
mtrl/integrity/__init__.py,sha256=IeexlOhCPCOz532zRkBAOsVpPOANJxuHEhK49t3XIFI,3699
|
|
58
|
+
mtrl/integrity/canonical.py,sha256=43Elrnoy1CIvcL1bSzbAOR1UBINh3QXxvzTntC-BUpA,17617
|
|
59
|
+
mtrl/integrity/digests.py,sha256=i2JwZpGg3-TT8STHsd6RDPAYfwZCFNmza6PJuuq7G4w,11495
|
|
60
|
+
mtrl/integrity/manifest.py,sha256=7Hv25frCFwftEdJOLKuhJpZyrsjzSvKNa0lwo_tnopo,24869
|
|
61
|
+
mtrl/integrity/receipts.py,sha256=OUh9kxdcg1kSzxd73AHW3xECx0KpF__noI2Uy0kxlZU,28293
|
|
62
|
+
mtrl/integrity/verification.py,sha256=OTRRZpSqJOZDuLNivCQO3uiI9-zp8u44YeNrkmA2Rw0,45133
|
|
63
|
+
mtrl/operations/__init__.py,sha256=odQ4R8pmpBlr5Cy5AZVLGwAd4H_eFhbHu2Dny8c5_5w,1031
|
|
64
|
+
mtrl/operations/_identity.py,sha256=lfsnchZn_E1-IUEbAAGd4xNHzTLhyp35nLvud0pPBVI,316
|
|
65
|
+
mtrl/operations/_validation.py,sha256=FYxWDiitjq1KbLsYO-ld9S0w-sp2AXsxzbh1OfWAS4c,3797
|
|
66
|
+
mtrl/operations/arithmetic.py,sha256=kbsrlYY1vj30bruLSz4Ddrbt-35htjSpP1ds2CrMvQo,8382
|
|
67
|
+
mtrl/operations/base.py,sha256=SyIIqNgoH21Pf6YMAnixKScM_NetUBMGxlpHhJa-y7M,11059
|
|
68
|
+
mtrl/operations/resampling.py,sha256=QTG7RaQ04b8tteIHWcpBsFKHXFZ2ZKgzuQTCjYPhDHE,7554
|
|
69
|
+
mtrl/operations/resampling_scipy.py,sha256=ObDb0z19ENLxEOBIXVhCYaUzmR7Nng-y9cE9oWqU6vo,4904
|
|
70
|
+
mtrl/operations/spectra.py,sha256=n2lmsf8iGp_Jon25aSua2zXE7rzYftrPwuJYHV3fvY4,2362
|
|
71
|
+
mtrl/processing/__init__.py,sha256=YfEquS19a1Ch-HWUe2MRD6ZhnplXT7Ph__hS_2nJLgM,583
|
|
72
|
+
mtrl/processing/_table_capture.py,sha256=Oyz6ig9pPcDhQWAietO8sfkxeWrn5X9Wqb5JY2rrHLI,12457
|
|
73
|
+
mtrl/processing/limits.py,sha256=CfPIL6_MiDpcvylf2O5I00myPTNqFHCmnz_42Qapc-Q,401
|
|
74
|
+
mtrl/processing/registry.py,sha256=mLbVcVfyABtQ_i-dAei-9BZtQ8USxbU9DaNcGKBGlaE,63740
|
|
75
|
+
mtrl/transformations/__init__.py,sha256=x9Se7ZUbCB7_mwbwWn-IcP2MPHFR0suLYkdni9u5RKA,738
|
|
76
|
+
mtrl/transformations/base.py,sha256=9TbCSpM-2hytnreUE2YtW62OJz0oi_hKa4kxyrebXkk,491
|
|
77
|
+
vector_mtrl-0.2.0.dist-info/METADATA,sha256=OUXi5t4frEkcQ-MvYm052TFmK_e2Xw0UYsVdihCORSM,5492
|
|
78
|
+
vector_mtrl-0.2.0.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
|
|
79
|
+
vector_mtrl-0.2.0.dist-info/licenses/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
|
|
80
|
+
vector_mtrl-0.2.0.dist-info/licenses/NOTICE,sha256=G6LHUEsMF-StwWFKa1QoTaoIxtqRjVqp0NY74FCYnLs,1440
|
|
81
|
+
vector_mtrl-0.2.0.dist-info/RECORD,,
|