Skip to content
Merged
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
2 changes: 1 addition & 1 deletion .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python: [ "3.10", 3.13 ]
python: [ "3.10", 3.14 ]
os: [ macos-latest, ubuntu-24.04, windows-latest ]
defaults:
run:
Expand Down
12 changes: 7 additions & 5 deletions .github/workflows/wheels.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python: ["3.10", 3.11, 3.12, 3.13]
python: ["3.10", 3.11, 3.12, 3.13, 3.14]
steps:
- name: Checkout
uses: actions/checkout@v6.0.2
Expand Down Expand Up @@ -51,7 +51,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python: ["3.10", 3.11, 3.12, 3.13]
python: ["3.10", 3.11, 3.12, 3.13, 3.14]
wordsize: [64]
steps:
- name: Checkout
Expand Down Expand Up @@ -125,7 +125,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python: ["3.10", 3.11, 3.12, 3.13]
python: ["3.10", 3.11, 3.12, 3.13, 3.14]
runner: [macos-15, macos-15-intel]
include:
- runner: macos-15
Expand Down Expand Up @@ -163,7 +163,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python: ["3.10", 3.11, 3.12, 3.13]
python: ["3.10", 3.11, 3.12, 3.13, 3.14]
wordsize: [64]
steps:
- name: Download wheels
Expand All @@ -188,7 +188,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python: ["3.10", 3.11, 3.12, 3.13]
python: ["3.10", 3.11, 3.12, 3.13, 3.14]
include:
- python: "3.10"
wheel: cp310
Expand All @@ -198,6 +198,8 @@ jobs:
wheel: cp312
- python: 3.13
wheel: cp313
- python: 3.14
wheel: cp314
steps:
- name: Download wheels
uses: actions/download-artifact@v7.0.0
Expand Down
16 changes: 10 additions & 6 deletions python/CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@
ID is e.g. a population name, rather than silently returning no samples.
(:user:`hyanwong`, :pr:`3344`)

**Maintenance**

- Add support for Python 3.14

--------------------
[1.0.0] - 2025-11-27
--------------------
Expand All @@ -22,7 +26,7 @@
- ``TreeSequence.tables`` now returns a zero-copy immutable view of the tables.
To get a mutable copy, use ``TreeSequence.dump_tables()``.
(:user:`benjeffery`, :pr:`3288`, :issue:`760`)

- For a tree sequence to be valid, the mutation parents in the table collection
must be correct and consistent with the topology of the tree at each mutation site.
``TableCollection.tree_sequence()`` will raise a ``_tskit.LibraryError`` if this
Expand Down Expand Up @@ -146,7 +150,7 @@
(:user:`hyanwong`, :pr:`3165`, :issue:`3164`)

- Add ``TreeSequence.map_to_vcf_model`` method to return a mapping of
the tree sequence to the VCF model.
the tree sequence to the VCF model.
(:user:`benjeffery`, :pr:`3163`)

- Use a thin space as the thousands separator in HTML output,
Expand All @@ -157,14 +161,14 @@

- Correct assertion message when tables are compared with metadata ignored.
(:user:`benjeffery`, :pr:`3162`, :issue:`3161`)
**Breaking changes**

**Breaking changes**

- ``TreeSequence.write_vcf`` now filters non-sample nodes from individuals
by default, instead of raising an error. These nodes can be included using the
new ``include_non_sample_nodes`` argument.
new ``include_non_sample_nodes`` argument.
By default individual names (sample IDs) in VCF output are now of the form
``tsk_{individual.id}`` Previously these were always
``tsk_{individual.id}`` Previously these were always
``"tsk_{j}" for j in range(num_individuals)``. This may break some downstream
code if individuals are specified. To fix, manually specify ``individual_names``
to the required pattern.
Expand Down
11 changes: 6 additions & 5 deletions python/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ classifiers = [
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3 :: Only",
"Development Status :: 5 - Production/Stable",
"Environment :: Other Environment",
Expand Down Expand Up @@ -68,9 +69,9 @@ test = [
"kastore==0.3.3",
"lshmm==0.0.8",
"msgpack==1.1.0",
"msprime==1.3.4",
"msprime==1.4.0b2",
"networkx==3.2.1",
"numba==0.61.2",
"numba==0.63.1",
"portion==2.6.0",
"pytest==8.3.5",
"pytest-cov==6.0.0",
Expand All @@ -88,8 +89,8 @@ docs = [
"sphinx-autodoc-typehints==2.3.0",
"sphinx-issues==5.0.0",
"sphinx-argparse==0.5.2",
"msprime==1.3.3",
"numba==0.61.2",
"msprime==1.4.0b2",
"numba==0.63.1",
"sphinx-book-theme",
"pandas==2.2.3",
]
Expand Down Expand Up @@ -117,7 +118,7 @@ dev = [
"xmlunittest",
"newick",
"zarr<3",
"jupyter-book",
"jupyter-book<2",
"breathe",
"sphinx-autodoc-typehints",
"sphinx-issues",
Expand Down
2 changes: 1 addition & 1 deletion python/tests/test_balance_metrics.py
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ def test_b2_base(self, base, expected):

@pytest.mark.parametrize("base", [0, -0.001, -1, -1e-6, -1e200])
def test_b2_bad_base(self, base):
with pytest.raises(ValueError, match="math domain"):
with pytest.raises(ValueError):
self.tree().b2_index(base=base)

def test_b2_base1(self):
Expand Down