Metadata-Version: 2.4
Name: itaca
Version: 0.2.0
Summary: Integrated Toolkit for Aerospace Computation and Analysis: rigorous engineering data management, analysis, and computation
Author: Geovana Neves
License: MIT
Project-URL: Homepage, https://github.com/nevesgeovana/itaca
Project-URL: Source, https://github.com/nevesgeovana/itaca
Project-URL: Changelog, https://github.com/nevesgeovana/itaca/blob/main/CHANGELOG.md
Project-URL: Issues, https://github.com/nevesgeovana/itaca/issues
Keywords: aerospace,data-management,uncertainty,GUM,provenance,wind-tunnel
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
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
Classifier: Typing :: Typed
Requires-Python: <3.14,>=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: numpy<3.0,>=1.26
Provides-Extra: pandas
Requires-Dist: pandas<3.0,>=2.1; extra == "pandas"
Provides-Extra: dev
Requires-Dist: pytest<9.0,>=8.0; extra == "dev"
Requires-Dist: pytest-cov<6.0,>=5.0; extra == "dev"
Requires-Dist: hypothesis<7.0,>=6.100; extra == "dev"
Requires-Dist: ruff==0.15.22; extra == "dev"
Requires-Dist: mypy<2.0,>=1.10; extra == "dev"
Requires-Dist: pre-commit<5.0,>=3.7; extra == "dev"
Requires-Dist: scipy<2.0,>=1.11; extra == "dev"
Requires-Dist: pyyaml<7.0,>=6.0; extra == "dev"
Requires-Dist: build<2.0,>=1.0; extra == "dev"
Requires-Dist: pandas<3.0,>=2.1; extra == "dev"
Dynamic: license-file

# ITACA

[![PyPI](https://img.shields.io/pypi/v/itaca)](https://pypi.org/project/itaca/)
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.21482648.svg)](https://doi.org/10.5281/zenodo.21482648)
[![CI](https://github.com/nevesgeovana/itaca/actions/workflows/ci.yml/badge.svg)](https://github.com/nevesgeovana/itaca/actions/workflows/ci.yml)

**Integrated Toolkit for Aerospace Computation and Analysis**

*From data to wisdom.*

```python
import itaca as itc
```

ITACA is a Python library for rigorous engineering data management,
analysis, and computation, with a primary focus on aerospace applications.
It manages multidimensional experimental and numerical datasets (wind
tunnel campaigns, CFD post-processing, flight-test data, engineering
computations) with mandatory provenance, automatic GUM-compliant
uncertainty propagation including covariance, and origin tags for every
value. Where a propagation rule is not yet frozen, the operation raises
instead of returning a number: see Status below for which five. The
plotting layer (`ItcFigure`, the AIAA style, the matplotlib backend) is
roadmapped for v0.2.1 and is not in the library today.

## Installation

```bash
pip install itaca
```

ITACA needs Python 3.11, 3.12 or 3.13, and depends only on NumPy. The pandas
bridge (`itc.load(df)`, `db.to_pandas()`) is optional:

```bash
pip install "itaca[pandas]"
```

## Quickstart

```python
import numpy as np
import itaca as itc

# Load, then declare which column is the sweep dimension.
rows = np.column_stack([[0.0, 2.0, 4.0], [10.0, 12.0, 14.0]])
db = itc.load(rows, names=["alpha", "FZ"]).pivot(dims=["alpha"])

# Assign an uncertainty; it propagates by the GUM rules, automatically.
db = db.set_uncertainty({"FZ": 0.05})
db = db.compute("CZ = FZ / 100.0")

print(db.vars["CZ"].values)             # [0.1  0.12 0.14]
print(db.uncertainty.systematic["CZ"])  # [0.0005 0.0005 0.0005]
print(db.history)                       # every step, in order
```

Every operation returns a **new** frame and records itself in History,
so nothing above mutates `db`. See `examples/` for a complete synthetic
wind tunnel walkthrough.

## Status

Pre-release, and the API is not frozen. Two milestones have shipped.

**Milestone M0, released as v0.1.0**: loading in all modes, inspection and
diagnostics, structural operations, two-component GUM uncertainty
propagation with covariance, string-equation derivation, explicit
combination, exports, and the `.itc` native format with state-hash
revalidation.

**Milestone M1, released as v0.2.0**: the analysis operations (`expand`,
`concat`, `interpolate`, `average`, `integrate`, `smooth`, `diff`,
`fitmodel`, `fitvalue`), the axes and vector-group system with rotation and
moment transfer, replayable pipelines and `.itc_pipe`, and reusable
processors defined by an `.itceq` equation file.

**Read the [release
notes](https://github.com/nevesgeovana/itaca/blob/main/CHANGELOG.md) before
you rely on uncertainty.** Five operations REFUSE to propagate it rather than
guessing: `smooth`, `diff`, `fitmodel`, `fitvalue`, and
`fill(method="polyfit")`. Each raises when the frame carries an uncertainty,
because its propagation rule is not yet frozen. The notes also carry a
`Known open` section listing the defects known open in this release, several
of which produce a wrong number silently.

**Upgrading from v0.1.0**, two things will bite first. Python 3.11 is now the
floor. And an `.itc` archive written by v0.1.0 whose dimensions or variables
carry a `unit`, `description` or `long_name` no longer verifies, because the
state hash now covers that metadata; re-export those archives from their
source data. Both are in the release notes with the reasoning.

The SRS is versioned in `docs/srs/`; its document version and revision
are stated on the SRS title page and in the revision history table.
Releases follow the incremental roadmap in the SRS Chapter 10: each
milestone ships on PyPI with a Zenodo DOI.

## Design record

* `docs/srs/`: the SRS LaTeX sources, the authoritative reference for
  what ITACA must do and how it is built. First workspace-tracked
  version: document 0.1.0, 2026-07-21.
* `docs/DECISIONS.md`: the architectural decisions with long-form
  rationale (the file's own header carries the current range).
* `docs/OPEN_QUESTIONS.md`: the design questions with resolutions.
* `docs/SISTER_PYFLIGHTSTREAM.md`: the co-developed sister library
  (DD-22, DD-23): division of labor, the cross-requirement
  convention, and the shared review process.

## Core convictions

1. Data management before analysis: a result is only as trustworthy as
   the pipeline that produced it.
2. Provenance is mandatory: every dataset knows where it came from, what
   was done to it, by whom, and when.
3. Fail fast and loud: ambiguity is an error, silent fallbacks are
   defects.
4. Uncertainty is native: two-component GUM propagation with covariance,
   not an afterthought.
5. Test-driven, coverage at or above 90 percent, minimal API surface,
   NumPy-only core.

## License and citation

MIT License (see `LICENSE`). Citation metadata lives in `CITATION.cff`.
Tagged releases are mirrored on Zenodo: cite the concept DOI
[10.5281/zenodo.21482648](https://doi.org/10.5281/zenodo.21482648) for
the latest version, or the per-release DOI (v0.1.0:
[10.5281/zenodo.21482649](https://doi.org/10.5281/zenodo.21482649); the
v0.2.0 DOI is minted when the tag is archived and is on the Zenodo record).
A
software paper (JOSS or SoftwareX) is planned after the API
stabilizes.

## Author

Geovana Neves, aerospace engineer (aeropropulsive integration and wind
tunnel testing), ITA / TU Delft.
