ITACA
Integrated Toolkit for Aerospace Computation and Analysis
From data to wisdom.
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.3.0 and is not in the library today.
Installation
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:
pip install "itaca[pandas]"
Quickstart
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 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 an earlier version, three things will bite first.
An .itc archive written by ANY earlier version no longer opens: the format
is at itaca-itc/3 and its two predecessors are refused by name, with a
message saying what the archive lacks. Re-export from the source data, or, if
the archive is your only copy, open it in a scratch environment on the version
that wrote it and export to CSV or JSON first.
The archives are refused rather than read, and the reason is the point of the change: neither predecessor records a spatial coordinate system, so a frame saved in Polar coordinates would come back Cartesian and integrate against the wrong area element. Reading them would reintroduce the defect the new schema exists to close, so silent reinterpretation is not offered as the remedy.
Code that derived quantities from a common root now RAISES
UncertaintyLineageError where it previously returned a number. The number
was wrong, by up to 3.6x on the measured case, and the message names the
single expression that is already correct or the set_correlation call that
settles it.
Python 3.11 is the floor, as of v0.2.0.
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.RELEASING.md: how a release is cut, and the one piece of configuration that lives on PyPI rather than in this repository, so no test here can check it (DD-45).
Core convictions
- Data management before analysis: a result is only as trustworthy as the pipeline that produced it.
- Provenance is mandatory: every dataset knows where it came from, what was done to it, by whom, and when.
- Fail fast and loud: ambiguity is an error, silent fallbacks are defects.
- Uncertainty is native: two-component GUM propagation with covariance, not an afterthought.
- 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 for
the latest version, or the per-release DOI, which is on the Zenodo record
for each archived version (v0.1.0:
10.5281/zenodo.21482649).
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.
Release files for itaca 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| itaca-0.2.1.tar.gz | 881.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| itaca-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.1 MB
Release files / itaca-0.2.1.tar.gz
| Download URL | itaca-0.2.1.tar.gz |
|---|---|
| Size | 881.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0c435b1835438240438445b7bece29c60a1e48870b6c436c5f98a5eeb0455a4c
|
|
BLAKE2b-256 checksum How to use checksums |
91367673c3790507a2af3ad4929dd0fc03dd5fef52344e8b4bcfb7cc59be7cab
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 2, 2026.
Transparency logRelease files / itaca-0.2.1-py3-none-any.whl
| Download URL | itaca-0.2.1-py3-none-any.whl |
|---|---|
| Size | 220.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
dc66dfdaf9707b183c6eec31c92270cbd22538a945fbd8f82712f600073c4494
|
|
BLAKE2b-256 checksum How to use checksums |
0d0783d5460586a8dd5382aa3d839b860df0efeb70e68499e3e68196b20963af
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 2, 2026.
Transparency log