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.

🐣 Never used Python? TUTORIAL.md — the complete zero-assumptions guide: install, units, loops/tables/plots/Excel, two full engineering workflows, glossary, FAQ. 🚀 Quick start (10 min): GETTING_STARTED.md — install + 8 worked examples with 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.4.tar.gz (801.5 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.4-py3-none-any.whl (646.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: austenite-0.1.4.tar.gz
  • Upload date:
  • Size: 801.5 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.4.tar.gz
Algorithm Hash digest
SHA256 d248dac1758ee4d0851db8e71a61a07e663768adb41987b5cf22b9831508dcf1
MD5 92f2ee7f91bf9c859481ad6b2a0088bf
BLAKE2b-256 1253ce108c370054e0ef690bfff8b2223aa60f9478e93c4247c4d789a299985b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: austenite-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 646.1 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.4-py3-none-any.whl
Algorithm Hash digest
SHA256 b593c9f17b07058a662d9f3a01d08d06be10a3488b75003cbe9a33cc45a84cb9
MD5 f942ebbb2d508f367398f0c4ae1041a8
BLAKE2b-256 c71b6999c41bce1a4881d8565fff2571c32cf971c28af782ad56493223b9c602

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