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.

🚀 New to this? Start with GETTING_STARTED.md — a beginner-friendly tutorial with copy-paste examples and explained results. 📖 Full capability reference: USAGE.md — every namespace (au.*) with runnable examples.

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.2.tar.gz (797.0 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.2-py3-none-any.whl (643.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: austenite-0.1.2.tar.gz
  • Upload date:
  • Size: 797.0 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.2.tar.gz
Algorithm Hash digest
SHA256 80864e5eb0bac863ce9aab83b3d474b3b95c57ed2b20e94fd521accab529f32b
MD5 048129b96f3355595952112b4ea0e45e
BLAKE2b-256 f3c85cc194f33392fff81ea56e2b2dc73973404d9236810d1005f74b3bfa9708

See more details on using hashes here.

File details

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

File metadata

  • Download URL: austenite-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 643.3 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 569466c3094540fe90756a8313319453312a43607a3e5292802b6ad04cfd48b5
MD5 c4b2920e924f1435026457e5308de17f
BLAKE2b-256 464e8f1effd0a6fd7ffc0cfa50481ffa3991761a3c08d3d8d938b2e9feb48ba5

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