Metadata-Version: 2.4
Name: brixta-cement-material
Version: 0.1.0
Summary: Unified cement material-state contracts and scientific-result adapters for BRIXTA Cement.
License-Expression: MIT
Project-URL: Repository, https://github.com/habibieebhy/brixta-cement
Project-URL: Issues, https://github.com/habibieebhy/brixta-cement/issues
Classifier: Development Status :: 3 - Alpha
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Provides-Extra: dev
Requires-Dist: build>=1.2; extra == "dev"
Requires-Dist: pytest>=8; extra == "dev"
Requires-Dist: ruff>=0.12; extra == "dev"
Requires-Dist: twine>=6; extra == "dev"
Dynamic: license-file

# brixta-cement-material

`brixta-cement-material` defines the BRIXTA-owned, engine-neutral material state
used to move observed cement-material data between scientific integrations and
the Cement Twin.

It does **not** implement XRD, XRF, thermodynamics, or other scientific
calculations. Those remain owned by upstream scientific engines and their
BRIXTA adapters.

## Scope of 0.1.0

The first release provides:

- `MaterialState`
- optional `ChemicalComposition`
- optional `Mineralogy`
- generic `MeasurementRecord` provenance
- JSON serialization
- structural XRD-result adapter `material_state_from_xrd(...)`

A material state is deliberately partially observable. Chemistry is not
required, so an XRD-derived clinker state is valid even when XRF is unavailable.

```python
from brixta_cement_material import material_state_from_xrd

state = material_state_from_xrd(
    xrd_result,
    material_type="clinker",
)

assert state.chemistry is None
assert state.mineralogy is not None
```

The XRD adapter uses a structural protocol rather than depending on
`brixta-cement-xrd` at runtime. `brixta-cement-xrd` continues to own GSAS-II
orchestration; this package owns only the normalized BRIXTA material-domain
representation.

## Integration boundary

```text
GSAS-II
   |
brixta-cement-xrd
   |
XrdResult
   |
brixta-cement-material
   |
MaterialState
   |
brixta-cement-aas
   |
BaSyx / AAS
```

Chemistry can be added later from quantified XRF/oxide data without changing
the mineralogy contract.

## Status

Experimental alpha. Public contracts may evolve before 1.0.
