Repository navigation
1.1.0: audit follow-ups (gallery repeats, tutorial coverage, native usage) #284
Description
Tracking issue for the three audits run on 2026-09-05 before the 1.1.0 re-cut (repeats in the gallery, tutorial coverage of the public API, native-hypertools usage). Everything here ships in 1.1.0. Constraint: the five launch tutorials the Bluesky thread links (market_sectors, weather_decades, painting_embeddings, conversation_shape, morph_shapes_zoo) keep their pages and clips.
A. Gallery repeats and misdescriptions (examples/)
- Delete
plot_shape_morph.py(strict subset ofanimate_morph_zoo.py); fold the "all seven shapes" note intoanimate_morph_zoo; retargetanimate_surface_morph.py's reference - Merge
plot_TSNE.py+plot_UMAP.py+plot_digits.pyinto one example - Merge
plot_PPCA.pyintoplot_missing_data.py - Merge
animate_MDS.pyintoanimate.py - Merge
chemtrails.py+precog.pyinto one trails page (keepanimate_trails_mix.py) - Merge
plot_clusters.py/2/3into one three-cell example - Fix misdescribed docstrings:
plot_story_trajectories.py(execute the pipeline for real),plot_hue.py(categorical hue),animate_surface_morph.py(changelog prose),save_movie.py(hiddenalign=),plot_datasets_tour.py("five vs four") -
'hyper'->'HyperAlign'inanalyze.py,plot_align.py - Gallery ordering (
within_subsection_order) and the "Story trajectories" entry indocs/tutorials.rst - Retitle
conversation_trajectoriesandhugging_face_embeddingsso they read as distinct from their siblings
B. Native usage rewrites
-
load_digits->hyp.load('digits')(three examples);load_dataset->hyp.load(...)(streaming_data,hugging_face_embeddings) -
plot_procrustes.py: privateprocrustes()->hyp.align(model='Procrustes') -
plot_gensim_text.py:text2mat->hyp.plot(texts, vectorizer=..., semantic=...) -
plot_autoencoders.py:ax.scatter->hyp.plot(..., ax=) -
animate_surface_morph.py: drop the hand downsample;set_alpha->alpha=(c4ed79c + morph alpha fix) - Remove dead sentence-transformers / pykalman import guards (six files) (examples done; tutorials in progress) now that extras install on demand
-
projectile_kalman.ipynbandstock_forecasting.ipynbhandax.plotpanels ->hyp.plot(..., reduce=None, ndims=2, ax=) - Library gap: isotropic (whole-array) option for
Normalize(feefcbe:Normalize(mode='isotropic'), 21 tests), so the three morph files stop hand-rollingnormalize_shape(); tests + docs - Tighten
tests/test_examples_are_native.pyDEFECT_MARKERSwith the signatures the audit listed (with a per-file allowlist for deliberateax=demos)
C. Coverage: new and rebuilt tutorials (each executed, in docs/tutorials.rst, install cell, gate entry)
-
hierarchy.ipynb: column-MultiIndex frame, per-sector traces + mean,names=, per-levelalpha=, hierarchicalpredict=andreturn_modeltrace_data -
animate_forecast.py+ tutorial:animate=True, predict='Kalman', forecast_trail=True,forecast_hue/palette/fmt -
io.ipynb:hyp.loadof local files / URL / HF streaming / DataFrame,hyp.saveround trips,save_pathformats,HypertoolsIOError -
pipelines.ipynb:return_modelon every dispatcher,.transform,pipeline=replay,apply_model,supported_models(), bundle keys,Pipelinedirectly -
manip.ipynb:hyp.manipSmooth/Resample/ZScore/Normalize and chains,animate='window'+focused= -
Rebuild
plot.ipynb: saving executed,animate=,names=,colorbar=,alpha=list,size/elev/azim, labels,font=,label_alpha=,backend='plotly',impute=,resample=, exception classes -
Rebuild
align.ipynb: Procrustes, SRM,align=insideplot/analyze, fitted aligner reuse, local image -
Rebuild
analyze.ipynb: call every stage it advertises, hypertools figures instead of seaborn heatmaps -
Rebuild
reduce.ipynb:describecurve drawn, UMAP, autoencoders,return_model -
Extend
stock_forecasting.ipynb(Chronos section) andprojectile_kalman.ipynb(sklearn imputers vs Kalman) -
Library gap found by the morph rewrite:
alpha=does not reach the travelling morph cloud (matplotlib and plotly); fix + tests, then drop theset_alphacall inanimate_surface_morph.py
D. Verification and release
- Every tutorial executed with
scripts/execute_tutorial.py; measured output cells recorded in the gate - Full suite (4118 passed), ruff,
sphinx -Wgallery build, Colab feature tour (both backends, fresh runtimes) - Gallery republished from the release commit (3a9b868); artifacts rebuilt; master pushed; - [ ] CI green;
v1.1.0moved; tag CI green; draft release updated
Found while fixing (all fixed for 1.1.0)
- Glyph 8722 warning on caller-supplied
ax=panels: tick labels under thesans-serifalias have no per-glyph fallback -> theax=path sets the tick-label font list (217a2a6) -
hyp.io.lsl_stream()left its inlet open ->LSLStreamdestroys it on close/with/GC/exit (61f3e7e) - PPCA
divide by zero encountered in logon wide data ->slogdet(54b4b2e) -
hyp.load(DataFrame)raised TypeError -> passthrough for loaded data (a8d073a) -
hyp.plot(x, pipeline=<hand-built Pipeline with raw sklearn stages>)raised -> fit-or-transform replay of raw steps,Pipeline.is_fitted(3340595) -
DEFECT_MARKERStightened with the audit signatures (6b6bcbc); not added: weather's trailingrolling(12).mean()(hypertools Smooth is centred; visual rewrites deferred to 1.2 per maintainer)
Also fixed on the way (not in the original audit): HF vectorizers crashing with the default semantic= (#285, 1b34b1d), pipeline replay of hand-built Pipelines (3340595), LSL inlet destroy (bb07321), docs-gate literal for the market notebook (d724181), gensim example title overline, stale gallery output pages.
Activity
feat(manip): Normalize(mode='isotropic') -- one shared centre and sca…
docs(gallery): merge duplicate examples, fix misdescribed ones, nativ…
fix(animate): alpha= reaches the morph cloud on both backends
docs(tutorials): rebuild the core and showcase tutorials to exercise …
docs(tutorials): five new tutorials -- hierarchy, io, pipelines, mani…
docs(tutorials): rebuild align and reduce; re-executed after the tick…
fix(io): lsl_stream returns an LSLStream that destroys its inlet on c…
fix(impute): PPCA's EM objective uses slogdet, ending the divide-by-z…
feat(io): hyp.load passes already-loaded data through instead of rais…
test(gate): six audit-3 defect markers (load_digits, load_dataset, te…
feat(plot): pipeline= replays hand-built Pipelines with raw scikit-le…
docs(tutorials): pipelines tutorial demonstrates a raw-PCA Pipeline r…
docs(tutorials): text tutorials drop the semantic=None/corpus=None bo…
fix(io): LSLStream.close destroys the inlet directly instead of close…
test(examples): scan every example and tutorial for the native-usage …
jeremymanning commentedon Sep 6, 2026
Verification pass before the 1.1.0 re-cut (2026-09-06, branch
fix/1.1-release-review, PR #286).Every checkbox in sections A, B and C was checked against the tree by running the examples and reading the notebooks, not by trusting the ticks. All hold, with these corrections now on the branch:
DEFECT_MARKERSscan covered only the six launch scripts and six launch notebooks, soload_digits,load_dataset(,text2mat(and the other signatures never scanned the files this issue rewrote. It now walks all 51 examples and every non-install code cell of all 25 tutorials, has theax=marker with the counted per-file allowlist this issue described, and a planted-marker test proves it fires. The eight rebuilt tutorials now have output-cell gate entries.align.ipynbhad dropped its alignment illustration instead of localising it; the image is back with a relative path.'hyper'alias is presented as deprecated inanalyze.ipynbandplot.ipynb;manip.ipynbshowsNormalize(mode='isotropic').Section D: master and the
v1.1.0tag both sit at 96ac8b7 with all 17 CI jobs green and a draft GitHub release attached. The unchecked sub-item stays open on purpose: PR #286 adds fixes after the tag, so the tag, the gallery manifest and the draft assets are re-cut from the merge commit (RELEASE_CHECKLIST.md now describes that re-cut).The suite is at 4900+ tests. The issue text's "4118 passed" was the count at the time it was written.
Closes on merge of #286.