Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/run_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,12 @@ jobs:
# test with oldest and latest supported Python versions
# NOTE: If bumping the minimum Python version here, also do it in
# ruff.toml, setup.py and other CI files as well.
python-version: ["3.10", "3.14"]
python-version: ["3.12", "3.14"]
runtime-deps: ["latest"]

include:
- os: ubuntu-latest
python-version: "3.10"
python-version: "3.12"
runtime-deps: "oldest"

fail-fast: false
Expand Down Expand Up @@ -233,7 +233,7 @@ jobs:
matrix:
os: [ubuntu-latest]
# test with oldest supported Python version only (for slow tests)
python-version: ["3.10"]
python-version: ["3.12"]

demo: ${{ fromJson(needs.get-e2e-matrix.outputs.demos) }}

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/test_pip_install.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
- ubuntu-latest
- macos-latest
python-version:
- "3.10"
- "3.12"
- "3.14"
dependencies:
- "pinned"
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/update_runtime_deps.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ def write_unbounded_pyproject(pyproject_file: str, workdir: str) -> None:
"project": {
"name": "tesseract-runtime-deps-resolver",
"version": "0.0.0",
"requires-python": pyproject["project"].get("requires-python", ">=3.10"),
"requires-python": pyproject["project"].get("requires-python", ">=3.12"),
"dependencies": new_deps,
}
}
Expand Down
7 changes: 0 additions & 7 deletions examples/py310/tesseract_config.yaml

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@ class OutputSchema(BaseModel):


def apply(inputs: InputSchema) -> OutputSchema:
# Ensure that the Python version is what we expect (3.10)
# Ensure that the Python version is what we expect (3.12)
import sys

assert sys.version_info[:2] == (3, 10)
assert sys.version_info[:2] == (3, 12)
return OutputSchema(bar=0)


Expand Down
7 changes: 7 additions & 0 deletions examples/py312/tesseract_config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
name: "py312"
version: "0.1.0"
description: |
Empty Tesseract that requires Python 3.12 (set through build_config.python_version).

build_config:
python_version: "3.12"
2 changes: 1 addition & 1 deletion examples/qp_solve/tesseract_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
# Tesseract API module for lp_solve
# Generated by tesseract 0.9.0 on 2025-06-04T13:11:17.208977
import functools
from typing import Self

import jax
import jax.numpy as jnp
import qpax
from pydantic import BaseModel, Field, model_validator
from typing_extensions import Self

from tesseract_core.runtime import Array, Differentiable, Float32

Expand Down
3 changes: 1 addition & 2 deletions examples/vectoradd_jax/tesseract_api.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
# Copyright 2025 Pasteur Labs. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0

from typing import Any
from typing import Any, Self

import equinox as eqx
import jax.numpy as jnp
import numpy as np
from pydantic import BaseModel, Field, model_validator
from typing_extensions import Self

from tesseract_core.runtime import Array, Differentiable, Float32
from tesseract_core.runtime.jax_recipes import (
Expand Down
3 changes: 1 addition & 2 deletions examples/vectoradd_torch/tesseract_api.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
# Copyright 2025 Pasteur Labs. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0

from typing import Any
from typing import Any, Self

import numpy as np
import torch
from pydantic import BaseModel, Field, model_validator
from torch.utils._pytree import tree_map
from typing_extensions import Self

from tesseract_core.runtime import Array, Differentiable, Float32
from tesseract_core.runtime.tree_transforms import filter_func, flatten_with_paths
Expand Down
1,869 changes: 93 additions & 1,776 deletions production.uv.lock

Large diffs are not rendered by default.

6 changes: 4 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ authors = [
{name = "The Tesseract team @ Pasteur Labs + OSS contributors", email = "info@simulation.science"},
]
license = { text = "Apache-2.0" }
requires-python = ">=3.10,<3.15"
requires-python = ">=3.12,<3.15"
dependencies = [
"jinja2",
"rich",
Expand Down Expand Up @@ -149,7 +149,7 @@ omit = [

[tool.ruff]
# Set to the lowest supported Python version.
target-version = "py310"
target-version = "py312"

# Set the target line length for formatting.
line-length = 88
Expand Down Expand Up @@ -190,6 +190,8 @@ ignore = [
"D213", # Pydocstyle: multiline docstring summary start on 2nd line. Conflicts with D212
"ANN202", # Type annotations: allow missing return type for private functions
"ANN401", # Type annotations: allow Any
"UP040", # PEP 695 `type` alias: opt-out; some aliases are used at runtime (e.g. isinstance)
"UP047", # PEP 695 generics: opt-out to avoid a py312 modernization sweep
]

[tool.ruff.lint.extend-per-file-ignores]
Expand Down
10 changes: 2 additions & 8 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,13 @@ idna==3.18
# via requests
jinja2==3.1.6
# via tesseract-core
markdown-it-py==3.0.0 ; python_full_version < '3.11'
# via rich
markdown-it-py==4.2.0 ; python_full_version >= '3.11'
markdown-it-py==4.2.0
# via rich
markupsafe==3.0.3
# via jinja2
mdurl==0.1.2
# via markdown-it-py
numpy==2.2.6 ; python_full_version < '3.11'
# via tesseract-core
numpy==2.4.6 ; python_full_version == '3.11.*'
# via tesseract-core
numpy==2.5.0 ; python_full_version >= '3.12'
numpy==2.5.0
# via tesseract-core
orjson==3.11.9
# via tesseract-core
Expand Down
3 changes: 2 additions & 1 deletion tests/dummy_tesseract/tesseract_api.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
# Copyright 2025 Pasteur Labs. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0

from typing import Self

import numpy as np
from pydantic import BaseModel, Field, model_validator
from typing_extensions import Self

from tesseract_core.runtime import Array, Differentiable, Float32

Expand Down
2 changes: 1 addition & 1 deletion tests/endtoend_tests/test_examples.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ class Config:
# Add config and test cases for specific unit Tesseracts here
TEST_CASES = {
"empty": Config(test_with_random_inputs=True),
"py310": Config(test_with_random_inputs=True),
"py312": Config(test_with_random_inputs=True),
"helloworld": Config(test_with_random_inputs=True),
"pip_custom_step": Config(test_with_random_inputs=True),
"pyvista-arm64": Config(test_with_random_inputs=True),
Expand Down
Loading