diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 92cbd82..978dddd 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -18,7 +18,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: "3.11" + python-version: "3.12" - name: Install dependencies run: | diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f0fde9e..59ab146 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -2,16 +2,16 @@ name: Tests on: push: - branches: [main] + branches: [main, claude/spec-driven-engine] pull_request: - branches: [main] + branches: [main, claude/spec-driven-engine] jobs: test: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.11", "3.12", "3.13", "3.14"] + python-version: ["3.12", "3.13", "3.14"] steps: - uses: actions/checkout@v4 @@ -21,10 +21,15 @@ jobs: with: python-version: ${{ matrix.python-version }} + - name: Set up uv + uses: astral-sh/setup-uv@v6 + - name: Install dependencies run: | - python -m pip install --upgrade pip - pip install -e ".[dev]" + # uv (not pip) so [tool.uv.sources] is honored — microimpute is + # pinned to a git rev there; plain pip resolves PyPI instead and + # gets an Imputer API the spec engine cannot run against. + uv pip install --system -e ".[dev]" - name: Run tests run: | diff --git a/pyproject.toml b/pyproject.toml index 10ae935..4d9bb10 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,14 +24,13 @@ classifiers = [ "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Scientific/Engineering :: Information Analysis", ] -requires-python = ">=3.11" +requires-python = ">=3.12" dependencies = [ "torch>=2.0", "numpy>=1.24", @@ -70,7 +69,7 @@ l0 = [ calibrate = [ # Identity-preserving gradient-descent chi-squared adapter. # microcalibrate pins Python >=3.13; the marker avoids breaking - # microplex installs on 3.11/3.12 that don't need the extra. + # microplex installs on 3.12 that don't need the extra. "microcalibrate>=0.22; python_version >= '3.13'", ] benchmark = [ @@ -122,7 +121,7 @@ select = ["E", "F", "I", "N", "W", "UP"] ignore = ["E501"] # Line length handled by formatter [tool.mypy] -python_version = "3.11" +python_version = "3.12" warn_return_any = true warn_unused_configs = true ignore_missing_imports = true diff --git a/tests/core/__init__.py b/tests/core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/spec/__init__.py b/tests/spec/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/targets/__init__.py b/tests/targets/__init__.py new file mode 100644 index 0000000..e69de29