Skill Tracer
Skills › Scientific Agent Skills › etetoolkit › review.md

review.md

89 lines · skills/etetoolkit/references/review.md at 5f2bc03

Open on GitHub
1# ETE 4.4.0 review — September 30, 2026
2
3PyPI and the official GitHub release catalogue still identify **4.4.0** as the
4current release. This skill targets that package. The installed core-tree,
5NCBI, GTDB, and PhyloTree source files were byte-identical to the official
6`4.4.0` tag during this review. The current documentation can disagree with
7released defaults; runtime behavior and tagged source resolve those differences.
8

ETE 4.4.0 review — September 30, 2026

PyPI and the official GitHub release catalogue still identify 4.4.0 as the current release. This skill targets that package. The installed core-tree, NCBI, GTDB, and PhyloTree source files were byte-identical to the official 4.4.0 tag during this review. The current documentation can disagree with released defaults; runtime behavior and tagged source resolve those differences.

Raw lines 1 to 8
9## Checked behavior
11The isolated Python 3.13 suite exercises the bundled CLIs and synthetic
12scientific examples: parser selection, Newick/NHX/Nexus round trips, leaf
13identity, pruning with pairwise-distance preservation, rooting, RF, property
14caches, monophyly, ultrametric conversion, species-overlap events,
15reconciliation, alignment linkage, duplication splitting, and topology-only
16patterns. Tiny synthetic NCBI and converted-GTDB archives exercise actual
17SQLite construction, names/ranks/lineages, descendants, topology and annotation.
18The taxonomy fixtures reject unexpected `requests.get()` downloads.
20Standalone runs also execute the documented preprocessing, metadata-join,
21midpoint, RF and offline-taxonomy examples. Qt SVG/PDF and SmartView PNG were
22rendered locally with their optional extras. These are small functional
23fixtures, not evidence of scientific accuracy for a real inferred tree.

Checked behavior

The isolated Python 3.13 suite exercises the bundled CLIs and synthetic scientific examples: parser selection, Newick/NHX/Nexus round trips, leaf identity, pruning with pairwise-distance preservation, rooting, RF, property caches, monophyly, ultrametric conversion, species-overlap events, reconciliation, alignment linkage, duplication splitting, and topology-only patterns. Tiny synthetic NCBI and converted-GTDB archives exercise actual SQLite construction, names/ranks/lineages, descendants, topology and annotation. The taxonomy fixtures reject unexpected requests.get() downloads.

Standalone runs also execute the documented preprocessing, metadata-join, midpoint, RF and offline-taxonomy examples. Qt SVG/PDF and SmartView PNG were rendered locally with their optional extras. These are small functional fixtures, not evidence of scientific accuracy for a real inferred tree.

Raw lines 9 to 24
25## Contracts that need particular care
27- `parser=0` is a valid explicit output choice. Never use a truthiness fallback
28 when forwarding parser IDs.
29- `prune()` accepts node objects. Resolve actual tips when internal labels can
30 collide with leaf names; validating tip names and then passing strings still
31 allows ambiguous resolution elsewhere in the tree.
32- A zero maximum RF means normalization is undefined. The CLI emits JSON
33 `null`, and rejects fewer than two common tips.
34- `set_midpoint_outgroup()` computes the exact diameter midpoint. Selecting
35 its containing edge with `get_midpoint_outgroup()` and using default
36 `set_outgroup()` placement can produce a different root position.
37- Support scale belongs to the input source. One percent and fractional one
38 are different values; the color helper now requires a declared scale.
39- Both CLI loaders reject nonfinite branch lengths and support. The released
40 Newick parser accepts `nan`, `inf`, and overflowing exponents; these must not
41 reach distance calculations, rendering, or JSON statistics.
42- `distance_matrix(squared=True)` returns a square list of lists ordered by
43 leaf iteration; it does not return labels or squared distances.
44- `render_sm()` warns and returns if Selenium is absent. The helper checks
45 dependencies and actual PNG bytes before reporting a saved artifact.
46- The Qt PDF renderer selects A4 paper; drawing dimensions do not specify
47 cropped page bounds. SmartView's narrow aligned panel can clip long titles.
48 Inspect final artifacts rather than equating a successful write with layout QA.
49- `NCBITaxa(update=False)` can still download when the database is missing.
50 Pass the local archive during construction, or check that the pinned database
51 exists before opening it offline. Retain its trusted traversal cache.
52- A GTDB genome's `sci_name` may be its parent species. Use the original
53 accession for genome identity.
54- Alignment sequences are stored in `leaf.props["sequence"]`, not a
55 `leaf.sequence` attribute; check that all intended alignment names matched.

Contracts that need particular care

  • parser=0 is a valid explicit output choice. Never use a truthiness fallback when forwarding parser IDs.
  • prune() accepts node objects. Resolve actual tips when internal labels can collide with leaf names; validating tip names and then passing strings still allows ambiguous resolution elsewhere in the tree.
  • A zero maximum RF means normalization is undefined. The CLI emits JSON null, and rejects fewer than two common tips.
  • set_midpoint_outgroup() computes the exact diameter midpoint. Selecting its containing edge with get_midpoint_outgroup() and using default set_outgroup() placement can produce a different root position.
  • Support scale belongs to the input source. One percent and fractional one are different values; the color helper now requires a declared scale.
  • Both CLI loaders reject nonfinite branch lengths and support. The released Newick parser accepts nan, inf, and overflowing exponents; these must not reach distance calculations, rendering, or JSON statistics.
  • distance_matrix(squared=True) returns a square list of lists ordered by leaf iteration; it does not return labels or squared distances.
  • render_sm() warns and returns if Selenium is absent. The helper checks dependencies and actual PNG bytes before reporting a saved artifact.
  • The Qt PDF renderer selects A4 paper; drawing dimensions do not specify cropped page bounds. SmartView's narrow aligned panel can clip long titles. Inspect final artifacts rather than equating a successful write with layout QA.
  • NCBITaxa(update=False) can still download when the database is missing. Pass the local archive during construction, or check that the pinned database exists before opening it offline. Retain its trusted traversal cache.
  • A GTDB genome's sci_name may be its parent species. Use the original accession for genome identity.
  • Alignment sequences are stored in leaf.props["sequence"], not a leaf.sequence attribute; check that all intended alignment names matched.
Raw lines 25 to 56
57## Public data access
59These interfaces query local SQLite, not remote paginated JSON APIs. The
60released updater fetches public archives without credentials:
62- NCBI: `https://ftp.ncbi.nlm.nih.gov/pub/taxonomy/taxdump.tar.gz`; its `.md5`
63 sidecar returned a valid digest record during the review. ETE consults it for
64 freshness of an existing archive, without verifying a fresh download. Its
65 requests also lack timeouts and HTTP status checks.
66- GTDB conversion:
67 `https://github.com/etetoolkit/ete-data/raw/main/gtdb_taxonomy/gtdblatest/gtdb_latest_dump.tar.gz`.
68 The official directory listing contained this archive but no `.md5` sidecar;
69 the sidecar returned 404. Pin an explicitly acquired release archive instead
70 of treating this moving converted dump as a dated GTDB release.
72No full public taxonomy database was downloaded. Real taxon-name examples
73remain illustrative until checked against the selected snapshot. External PAML
74models, large-tree performance, and remote SmartView deployments were not run.
75SmartView uses an unauthenticated local viewer; keep its loopback default.

Public data access

These interfaces query local SQLite, not remote paginated JSON APIs. The released updater fetches public archives without credentials:

  • NCBI: https://ftp.ncbi.nlm.nih.gov/pub/taxonomy/taxdump.tar.gz; its .md5 sidecar returned a valid digest record during the review. ETE consults it for freshness of an existing archive, without verifying a fresh download. Its requests also lack timeouts and HTTP status checks.
  • GTDB conversion: https://github.com/etetoolkit/ete-data/raw/main/gtdb_taxonomy/gtdblatest/gtdb_latest_dump.tar.gz. The official directory listing contained this archive but no .md5 sidecar; the sidecar returned 404. Pin an explicitly acquired release archive instead of treating this moving converted dump as a dated GTDB release.

No full public taxonomy database was downloaded. Real taxon-name examples remain illustrative until checked against the selected snapshot. External PAML models, large-tree performance, and remote SmartView deployments were not run. SmartView uses an unauthenticated local viewer; keep its loopback default.

Raw lines 57 to 76
77## Official sources
79- [Release 4.4.0](https://github.com/etetoolkit/ete/releases/tag/4.4.0)
80- [PyPI release metadata](https://pypi.org/pypi/ete4/json)
81- [Tree API](https://etetoolkit.github.io/ete/reference/reference_tree.html)
82- [Parser API](https://etetoolkit.github.io/ete/reference/reference_parsers.html)
83- [PhyloTree API](https://etetoolkit.github.io/ete/reference/reference_phylo.html)
84- [SmartView API](https://etetoolkit.github.io/ete/reference/reference_smartview.html)
85- [Taxonomy tutorial](https://etetoolkit.github.io/ete/tutorial/tutorial_taxonomy.html)
86- [Released core source](https://github.com/etetoolkit/ete/blob/4.4.0/ete4/core/tree.pyx)
87- [Released NCBI source](https://github.com/etetoolkit/ete/blob/4.4.0/ete4/ncbi_taxonomy/ncbiquery.py)
88- [Released GTDB source](https://github.com/etetoolkit/ete/blob/4.4.0/ete4/gtdb_taxonomy/gtdbquery.py)
89- [Converted GTDB archive directory](https://github.com/etetoolkit/ete-data/tree/main/gtdb_taxonomy/gtdblatest)