|
5 | 5 |
|
6 | 6 | ### Tesseract Core |
7 | 7 |
|
8 | | -Universal, autodiff-native software components for Simulation Intelligence. :package: |
| 8 | +Universal, autodiff-native software components for [Simulation Intelligence](https://docs.pasteurlabs.ai/projects/tesseract-core/latest/content/misc/faq.html#what-is-simulation-intelligence) 📦 |
9 | 9 |
|
10 | 10 | [Read the docs](https://docs.pasteurlabs.ai/projects/tesseract-core/latest/) | |
11 | 11 | [Report an issue](https://github.com/pasteurlabs/tesseract-core/issues) | |
12 | | -[Talk to the community](https://si-tesseract.discourse.group/) | |
| 12 | +[Community forum](https://si-tesseract.discourse.group/) | |
13 | 13 | [Contribute](https://github.com/pasteurlabs/tesseract-core/blob/main/CONTRIBUTING.md) |
14 | 14 |
|
15 | 15 | --- |
16 | 16 |
|
17 | 17 | [](https://doi.org/10.21105/joss.08385) |
| 18 | +[](https://proceedings.scipy.org/articles/kvfm5762) |
18 | 19 |
|
19 | | -**Tesseract Core** bundles: |
| 20 | +## The problem |
20 | 21 |
|
21 | | -1. Tools to define, create, and run Tesseracts, via the `tesseract` CLI and `tesseract_core` Python API. |
22 | | -2. The Tesseract Runtime, a lightweight, high-performance execution environment for Tesseracts. |
| 22 | +Real-world scientific workflows span multiple tools, languages, and computing environments. You might have a mesh generator in C++, a solver in Julia, and post-processing in Python. Getting these to work together is painful. Getting gradients to flow through them for optimization is nearly impossible. |
23 | 23 |
|
24 | | -## What is a Tesseract? |
| 24 | +Existing autodiff frameworks work great within a single codebase, but fall short when your pipeline crosses framework boundaries or includes legacy/commercial tools. |
25 | 25 |
|
26 | | -Tesseracts are components that expose experimental, research-grade software to the world. They are self-contained, self-documenting, and self-executing, via command line and HTTP. They are designed to be easy to create, easy to use, and easy to share, including in a production environment. This repository contains all you need to define your own and execute them. |
| 26 | +## The solution |
27 | 27 |
|
28 | | -Tesseracts provide built-in support for [differentiable programming](https://docs.pasteurlabs.ai/projects/tesseract-core/latest/content/introduction/differentiable-programming.html) by propagating gradient information at the level of individual components, making it easy to build complex, diverse software pipelines that can be optimized end-to-end. |
| 28 | +Tesseract packages scientific software into **self-contained, portable components** that: |
| 29 | + |
| 30 | +- **Run anywhere** — Local machines, cloud, HPC clusters. Same container, same results. |
| 31 | +- **Expose clean interfaces** — CLI, REST API, and Python SDK. No more deciphering undocumented scripts. |
| 32 | +- **Propagate gradients** — Each component can expose derivatives, enabling end-to-end optimization across heterogeneous pipelines. |
| 33 | +- **Self-document** — Schemas, types, and API docs are generated automatically. |
| 34 | + |
| 35 | +## Who is this for? |
| 36 | + |
| 37 | +- **Researchers** interfacing with (differentiable) simulators or probabilistic models, or who need to combine tools from different ecosystems |
| 38 | +- **R&D engineers** packaging research code for use by others, without spending weeks on DevOps |
| 39 | +- **Platform engineers** deploying scientific workloads at scale with consistent interfaces and dependency isolation |
| 40 | + |
| 41 | +## Example: Shape optimization across tools |
| 42 | + |
| 43 | +The [rocket fin optimization case study](https://si-tesseract.discourse.group/t/parametric-shape-optimization-of-rocket-fins-with-ansys-spaceclaim-pyansys-and-tesseract/109) combines three Tesseracts: |
| 44 | + |
| 45 | +``` |
| 46 | +[SpaceClaim geometry] → [Mesh + SDF] → [PyMAPDL FEA solver] |
| 47 | + ↑ | |
| 48 | + └──────── gradients flow back ─────────┘ |
| 49 | +``` |
| 50 | + |
| 51 | +Each component uses a different differentiation strategy (analytic adjoints, finite differences, JAX autodiff), yet they compose into a single optimizable pipeline. |
29 | 52 |
|
30 | 53 | ## Quick start |
31 | 54 |
|
32 | 55 | > [!NOTE] |
33 | | -> Before proceeding, make sure you have a [working installation of Docker](https://docs.docker.com/engine/install/) and a modern Python installation (Python 3.10+); if you prefer Docker Desktop for your platform, see [our extended installation instructions](https://docs.pasteurlabs.ai/projects/tesseract-core/latest/content/introduction/installation.html#basic-installation). |
34 | | -
|
35 | | -1. Install Tesseract Core: |
| 56 | +> Requires [Docker](https://docs.docker.com/engine/install/) and Python 3.10+. |
36 | 57 |
|
37 | | - ```bash |
38 | | - $ pip install tesseract-core |
39 | | - ``` |
| 58 | +```bash |
| 59 | +$ pip install tesseract-core |
40 | 60 |
|
41 | | -2. Build an example Tesseract: |
| 61 | +# Clone and build an example |
| 62 | +$ git clone https://github.com/pasteurlabs/tesseract-core |
| 63 | +$ tesseract build tesseract-core/examples/vectoradd |
42 | 64 |
|
43 | | - ```bash |
44 | | - $ git clone https://github.com/pasteurlabs/tesseract-core |
45 | | - $ tesseract build tesseract-core/examples/vectoradd |
46 | | - ``` |
| 65 | +# Run it |
| 66 | +$ tesseract run vectoradd apply '{"inputs": {"a": [1, 2], "b": [3, 4]}}' |
| 67 | +# → {"result": [4.0, 6.0], ...} |
47 | 68 |
|
48 | | -3. Display its API documentation: |
| 69 | +# Compute the Jacobian |
| 70 | +$ tesseract run vectoradd jacobian '{"inputs": {"a": [1, 2], "b": [3, 4]}, "jac_inputs": ["a"], "jac_outputs": ["result"]}' |
49 | 71 |
|
50 | | - ```bash |
51 | | - $ tesseract apidoc vectoradd |
52 | | - ``` |
| 72 | +# See auto-generated API docs |
| 73 | +$ tesseract apidoc vectoradd |
| 74 | +``` |
53 | 75 |
|
54 | 76 | <p align="center"> |
55 | 77 | <img src="https://github.com/pasteurlabs/tesseract-core/blob/main/docs/img/apidoc-screenshot.png" width="600"> |
56 | 78 | </p> |
57 | 79 |
|
58 | | -4. Run the Tesseract: |
| 80 | +## Core features |
| 81 | + |
| 82 | +- **Containerized** — Docker-based packaging ensures reproducibility and dependency isolation |
| 83 | +- **Multi-interface** — CLI, REST API, and Python SDK for the same component |
| 84 | +- **Differentiable** — First-class support for Jacobians, JVPs, and VJPs across component and network boundaries |
| 85 | +- **Schema-validated** — Pydantic models define explicit input/output contracts |
| 86 | +- **Language-agnostic** — Wrap Python, Julia, C++, [Fortran](https://docs.pasteurlabs.ai/projects/tesseract-core/latest/content/examples/building-blocks/fortran.html), or any executable behind a thin Python API |
| 87 | + |
| 88 | +## Ecosystem |
| 89 | + |
| 90 | +- **[tesseract-core](https://github.com/pasteurlabs/tesseract-core)** — CLI, Python API, and runtime (this repo) |
| 91 | +- **[Tesseract-JAX](https://github.com/pasteurlabs/tesseract-jax)** — Embed Tesseracts as JAX primitives into end-to-end differentiable JAX programs |
| 92 | +- **[Tesseract-Streamlit](https://github.com/pasteurlabs/tesseract-streamlit)** — Auto-generate interactive web apps from Tesseracts |
59 | 93 |
|
60 | | - ```bash |
61 | | - $ tesseract run vectoradd apply '{"inputs": {"a": [1], "b": [2]}}' |
62 | | - {"result":{"object_type":"array","shape":[1],"dtype":"float64","data":{"buffer":[3.0],"encoding":"json"}}}⏎ |
63 | | - ``` |
| 94 | +## Learn more |
64 | 95 |
|
65 | | -> [!TIP] |
66 | | -> Now you're ready to dive into the [documentation](https://docs.pasteurlabs.ai/projects/tesseract-core/latest/) for more information on |
67 | | -> [installation](https://docs.pasteurlabs.ai/projects/tesseract-core/latest/content/introduction/installation.html), |
68 | | -> [creating Tesseracts](https://docs.pasteurlabs.ai/projects/tesseract-core/latest/content/creating-tesseracts/create.html), and |
69 | | -> [invoking them](https://docs.pasteurlabs.ai/projects/tesseract-core/latest/content/using-tesseracts/use.html). |
| 96 | +- [Documentation](https://docs.pasteurlabs.ai/projects/tesseract-core/latest/) |
| 97 | +- [Creating your first Tesseract](https://docs.pasteurlabs.ai/projects/tesseract-core/latest/content/creating-tesseracts/create.html) |
| 98 | +- [Differentiable programming guide](https://docs.pasteurlabs.ai/projects/tesseract-core/latest/content/introduction/differentiable-programming.html) |
| 99 | +- [Design patterns](https://docs.pasteurlabs.ai/projects/tesseract-core/latest/content/creating-tesseracts/design-patterns.html) |
| 100 | +- [Example gallery](https://docs.pasteurlabs.ai/projects/tesseract-core/latest/content/examples/example_gallery.html) |
70 | 101 |
|
71 | 102 | ## License |
72 | 103 |
|
|
0 commit comments