Skip to main content

Bayesian end-to-end materials engineering — chemistry to compliance, with citations.

Project description

austenite

PyPI version CI License: MIT Python

Bayesian end-to-end materials engineering — chemistry to compliance, with citations.

austenite is the Python client for the Austenite API. One function call takes you from composition to a code-stamped fatigue allowable, with Bayesian posterior bands and the literature citations the engine used.

import austenite as au

result = au.design_path(
    alloy="AISI 4140",
    cooling_rate=10,
    spec="ASME-VIII-Div2",
    sigma_app_MPa=600,
    posterior=True,
)

print(result.properties.sigma_y_MPa)        # 1535
print(result.compliance.pass_)               # True
print(result.posterior["sigma_y_MPa"].p05)   # 1500
for c in result.citations:
    print(c.source, c.page)

Install

pip install austenite

For the notebook examples:

pip install "austenite[notebook]"

For batch MTC parsing with PDF + OCR support (requires tesseract binary):

pip install "austenite[ocr,xlsx]"
# also install tesseract: brew install tesseract  / apt install tesseract-ocr
# language packs: tesseract-ocr-deu, tesseract-ocr-jpn, tesseract-ocr-kor, ...

For the JAX-differentiable backend (end-to-end gradients through the composition -> hardness -> strength -> fracture -> fatigue chain, suitable for jax.grad / jax.jit / jax.vmap and gradient-based inverse design):

pip install "austenite[jax]"
import austenite as au
import jax
import jax.numpy as jnp

def objective(comp):
    # comp = [C, Mn, Cr, Mo, Ni, Si, V] in wt%
    r = au.design_path_jax(comp, cooling_rate=10.0, sigma_app_MPa=500.0)
    return r.fatigue.utilisation_pct

gradient = jax.grad(objective)(jnp.array([0.40, 0.85, 0.95, 0.20, 0.0]))
# gradient[i] = sensitivity of fatigue utilisation to element i (wt%)

See examples/08_jax_inverse_design.py for a full inverse-design loop. The differentiable engines (Maynier-Dollet HV30, Pavlina-Tyne 2008, Barsom-Rolfe 1972, Hall-Petch, Goodman) are calibrated against the same references as the production HTTP backend. The conceptual basis for end-to-end differentiable matsci is Liu & Strachan (2025), arXiv:2505.01585 -- austenite ships the first production implementation.

For development:

pip install -e ".[dev]"

Python 3.10+.


What's in the box

Function What it does
au.design_path(...) Full ICME chain: composition → CALPHAD → KWN → Orowan → Sy(t) → Goodman
au.am.qualification(...) Predict porosity, regime, and properties for LPBF / DED / EBM
au.am.sweep(...) Grid sweep over laser power × scan speed
au.mtc.parse(pdf) Parse a Material Test Certificate (PDF, URL, or raw text)
au.mtc.batch_parse(folder) Folder of 1000 PDFs in 7 languages → pandas DataFrame (replaces 2-4 QC FTEs)
au.mtc.audit_lot(df, spec=...) Compare a lot of heats against the spec library → Excel report
au.mtc.compare(a, b) Element-by-element diff between two MTCs (>0.05 wt% flag)
au.mtc.detect_grade(comp) Identify the most likely grade for a composition map
au.ttt.compute(...) Isothermal TTT curves + M_s / B_s
au.ttt.cct_sweep(...) CCT curves across a list of cooling rates
au.calphad.equilibrium(...) Phase fractions at (T, P, composition)
au.calphad.ternary(...) Sampled ternary isothermal section
au.bayesian.calphad(...) Posterior P(phase ≤ threshold) — the differentiator
au.audit.record / replay(...) Server-side audit log + replay

Configure

import austenite as au

au.set_api_url("https://api.austenite.org")   # default
au.set_timeout(30)                            # seconds
au.set_api_key("sk-...")                      # bearer token
au.set_max_retries(3)

Or set per-call:

client = au.Client(api_url="http://localhost:8000", timeout=10)

Async

import asyncio
import austenite as au

async def main():
    async with au.AsyncClient() as client:
        resp = await client.post("/v1/design-path", json={"alloy": "AISI 4140"})
        print(resp.json()["properties"]["sigma_y_MPa"])

asyncio.run(main())

Errors

import austenite as au

try:
    au.design_path(alloy="bogus")
except au.ValidationError as e:
    print(f"Bad input: {e}")          # HTTP 4xx
except au.RateLimitError as e:
    print(f"Slow down: {e}")          # HTTP 429
except au.EngineError as e:
    print(f"Server failed: {e}")      # HTTP 5xx
except au.NetworkError as e:
    print(f"Transport: {e}")          # timeout / DNS / reset

All transient failures (5xx, network) are retried automatically with exponential backoff (default 3 retries).


Examples

See examples/ for runnable scripts:

  1. 01_design_path_quickstart.py — AISI 4140 end-to-end
  2. 02_am_qualification.py — IN718 LPBF parameter sweep
  3. 03_batch_mtc_parse.py — folder of MTCs → pandas DataFrame
  4. 04_ttt_steel_grade.py — chemistry → CCT curves
  5. 05_calphad_phases.py — Fe-Cr-Ni equilibrium + Bayesian σ-phase posterior
  6. 07_batch_mtc_workflow.py — full 7-language batch MTC + audit + Excel export

Why this client?

  • Typed inputs and outputs — pydantic v2 models, so your IDE knows the shape.
  • Forward-compatible — server-side schema additions never break old clients.
  • Production-ready transport — automatic retries, idempotency keys, timeouts, bearer-token auth.
  • Sync + async in a single API.
  • Citations on every call — every prediction carries the literature it stands on.

Links


Built by Javanshir Hasanov.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

austenite-0.1.0.tar.gz (751.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

austenite-0.1.0-py3-none-any.whl (615.9 kB view details)

Uploaded Python 3

File details

Details for the file austenite-0.1.0.tar.gz.

File metadata

  • Download URL: austenite-0.1.0.tar.gz
  • Upload date:
  • Size: 751.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.4

File hashes

Hashes for austenite-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9e2199645ad032ede3a1ed76a836e883da8010047c6d247460967af75f4fb7f2
MD5 378f18450d5c940148d33a2b3779e274
BLAKE2b-256 d8c1a9f6402c37660afb6cd4841e72bb1b4024ed7eec80f094be32642b547688

See more details on using hashes here.

File details

Details for the file austenite-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: austenite-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 615.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.4

File hashes

Hashes for austenite-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 10e1500c223f548444f6f643292bd6b3623564c32023b64275c78fa63a018a44
MD5 981daa002471798f7843c4d406828cc8
BLAKE2b-256 cfaaaee70673b770bdde0b9e4759aba5f90e85fbfa90d3d27b5e2bd0f5ddfb18

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page