From e831cb2baaa5147046ece7e7832e9d3daf785bda Mon Sep 17 00:00:00 2001 From: Jeremy Manning Date: Fri, 9 Oct 2026 21:50:59 -0400 Subject: [PATCH 1/8] docs: Read the Docs reuses the pre-built gallery; README tour; American spelling Read the Docs - Its builds of 1.1 ended with "Build terminated due to time out": executing the 51 gallery examples takes about 25 minutes and the limit is 15. scripts/publish_prebuilt_gallery.py publishes the gallery the release pipeline builds to the docs-gallery-v branch (one orphan commit, replaced on republish), and docs/fetch_prebuilt_gallery.py, run from .readthedocs.yaml pre_build, puts it in docs/auto_examples. sphinx-gallery then skips every example whose source md5 is unchanged. Measured in a fresh clone with the Read the Docs recipe: 38 s, 0 warnings, output identical to the cold build apart from the two download zips and the execution-times page. - New release gate: the published manifest must name the release commit and the md5 of every example in the checkout. - A warning an example raises is printed on its gallery page with the example's repository path (examples/plot_impute.py:43), not the build machine's absolute path. The publisher refuses a gallery that names the checkout path. README - "What's new in 1.1" and "What's new in 1.0" become one short section that points at the changelog. - "A quick tour": the five launch clips as GIFs (images/tour_*.gif, 15-20 fps), each with a short description and a link to its tutorial. Spelling - American English in user-facing text: changelog, README, checklist, release notes, docs pages, docstrings, comments, messages, example scripts and tutorial text. Identifiers, quoted literals, vendored code and quoted source text are unchanged. docs/tutorials/io.ipynb and pipelines.ipynb were re-executed because a figure title or a printed line changed. Co-Authored-By: Claude Opus 5.5 --- .readthedocs.yaml | 6 + CHANGELOG.md | 320 +++---- RELEASE_CHECKLIST.md | 32 +- docs/_gallery_log_filter.py | 31 + docs/animation.rst | 72 +- docs/conf.py | 5 + docs/fetch_prebuilt_gallery.py | 158 ++++ docs/hierarchy.rst | 50 +- docs/pipeline_order.rst | 2 +- docs/tutorials.rst | 34 +- docs/tutorials/animate_forecast.ipynb | 10 +- docs/tutorials/conversation_shape.ipynb | 32 +- .../tutorials/conversation_trajectories.ipynb | 2 +- docs/tutorials/hierarchy.ipynb | 10 +- docs/tutorials/io.ipynb | 104 +-- docs/tutorials/manip.ipynb | 2 +- docs/tutorials/market_sectors.ipynb | 24 +- docs/tutorials/morph_shapes_zoo.ipynb | 6 +- docs/tutorials/painting_embeddings.ipynb | 44 +- docs/tutorials/pipelines.ipynb | 126 +-- docs/tutorials/projectile_kalman.ipynb | 4 +- docs/tutorials/weather_decades.ipynb | 24 +- examples/animate_conversation.py | 24 +- examples/animate_forecast.py | 10 +- examples/animate_market_sectors.py | 18 +- examples/animate_morph_zoo.py | 4 +- examples/animate_painting_embeddings.py | 36 +- examples/animate_surface_morph.py | 6 +- examples/animate_trails.py | 2 +- examples/animate_weather_decades.py | 24 +- hypertools/_shared/helpers.py | 6 +- hypertools/align/common.py | 4 +- hypertools/core/hierarchy.py | 10 +- hypertools/core/pipeline.py | 12 +- hypertools/core/shared.py | 2 +- hypertools/impute/backtest.py | 12 +- hypertools/impute/impute.py | 8 +- hypertools/io/load.py | 4 +- hypertools/io/save.py | 4 +- hypertools/io/sources.py | 2 +- hypertools/io/streaming.py | 2 +- hypertools/manip/common.py | 2 +- hypertools/manip/manip.py | 2 +- hypertools/manip/normalize.py | 14 +- hypertools/plot/animate.py | 2 +- hypertools/plot/animation_context.py | 12 +- hypertools/plot/colors.py | 16 +- hypertools/plot/forecast.py | 78 +- hypertools/plot/hierarchy.py | 16 +- hypertools/plot/hyper_animation.py | 8 +- hypertools/plot/matplotlib_backend.py | 30 +- hypertools/plot/meshutil.py | 2 +- hypertools/plot/morph.py | 2 +- hypertools/plot/multiindex.py | 2 +- hypertools/plot/ownership.py | 4 +- hypertools/plot/plot.py | 778 +++++++++--------- hypertools/plot/plotly_backend.py | 286 +++---- hypertools/plot/trails.py | 2 +- hypertools/predict/backtest.py | 2 +- hypertools/predict/predict.py | 6 +- hypertools/predict/time.py | 2 +- hypertools/reduce/describe.py | 6 +- hypertools/reduce/reduce.py | 2 +- hypertools/tools/analyze.py | 10 +- hypertools/tools/damage.py | 4 +- hypertools/tools/format_data.py | 6 +- hypertools/tools/normalize.py | 2 +- hypertools/tools/stack.py | 6 +- images/tour_conversation_shape.gif | Bin 0 -> 3650387 bytes images/tour_market_sectors.gif | Bin 0 -> 4967845 bytes images/tour_morph_shapes_zoo.gif | Bin 0 -> 3138594 bytes images/tour_painting_embeddings.gif | Bin 0 -> 2355115 bytes images/tour_weather_decades.gif | Bin 0 -> 3212892 bytes notes/release_notes_v1.1.0_draft.md | 88 +- notes/session_2026-10-08_visual-signoff.md | 75 ++ readme.md | 249 ++---- scripts/publish_prebuilt_gallery.py | 177 ++++ tests/test_docs_hierarchy_guide.py | 2 +- tests/test_prebuilt_gallery.py | 327 ++++++++ tests/test_release_readiness_gate.py | 51 ++ 80 files changed, 2156 insertions(+), 1403 deletions(-) create mode 100644 docs/fetch_prebuilt_gallery.py create mode 100644 images/tour_conversation_shape.gif create mode 100644 images/tour_market_sectors.gif create mode 100644 images/tour_morph_shapes_zoo.gif create mode 100644 images/tour_painting_embeddings.gif create mode 100644 images/tour_weather_decades.gif create mode 100644 scripts/publish_prebuilt_gallery.py create mode 100644 tests/test_prebuilt_gallery.py diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 0c942553..af42efb4 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -31,6 +31,12 @@ build: # blocker #2). Fetch a pinned Chrome into choreographer's deps dir, where # Kaleido discovers it automatically (no PATH wiring needed). - plotly_get_chrome -y + pre_build: + # Reuse the gallery the release pipeline built and published + # (scripts/publish_prebuilt_gallery.py): executing all the examples here + # takes longer than the 15-minute build limit. Examples whose source + # changed since are still executed by sphinx-gallery. + - python docs/fetch_prebuilt_gallery.py post_build: # Fix animated GIF thumbnails after documentation build - python docs/post_build.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ee243bd..d4cbb2c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,7 +46,7 @@ and a matplotlib Axes passed as `ax=` under the plotly backend. - **A column MultiIndex frame expands into one trace per group.** The innermost column level is the feature axis; every level above it groups, so a `(Market, Sector, Ticker)` frame draws one trajectory per sector plus - a heavier market-mean trajectory. Widths, opacities, colours and legend + a heavier market-mean trajectory. Widths, opacities, colors and legend labels follow the same documented formulas as row expansion. Unlike the row rule, every group keeps all `len(df)` rows -- column grouping never shortens a trace. A two-level `(Group, Feature)` hierarchy has no @@ -66,7 +66,7 @@ and a matplotlib Axes passed as `ax=` under the plotly backend. matching would make column ORDER part of the statistical model (measured: permuting one group's columns moved that group's trajectory and every mean derived from it, on label-equivalent frames), which is not a safe default - for a labelled frame. **Duplicate feature names inside a group are + for a labeled frame. **Duplicate feature names inside a group are permitted**, matched across groups by `(label, occurrence)`: no column is dropped and no group is merged. @@ -77,7 +77,7 @@ and a matplotlib Axes passed as `ax=` under the plotly backend. caller to predict how many mean traces expansion creates. A mean trace takes the element-wise mean of its leaves' hue, and hue is truncated by the same operation that truncates the data. A forecast overlay takes the - final observed hue colour of its source trace, static and animated alike + final observed hue color of its source trace, static and animated alike and on both backends (see *Documented limitations* for how this differs from a categorical regrouping). Categorical hue still defers to the grouping, with a warning: it regroups traces, so the named leaves would @@ -142,8 +142,8 @@ and a matplotlib Axes passed as `ax=` under the plotly backend. describing every plotted trajectory. `trace_data` holds the final pre-center/pre-scale trajectories -- the drawn artists are centered, scaled and (by default) antialiased copies of them, so they hold neither - array. `xform_data` is unchanged: it remains the analysed pipeline output - for the input datasets, one entry per analysed dataset, and derived means + array. `xform_data` is unchanged: it remains the analyzed pipeline output + for the input datasets, one entry per analyzed dataset, and derived means never enter it. The two are the same object only when no display-only projection occurred; a `reduce=` spec pinning more than three components makes them differ (`n_components=5` leaves `xform_data` 5-D while @@ -157,7 +157,7 @@ and a matplotlib Axes passed as `ax=` under the plotly backend. `coll._hyp_trace_index` -- so a caller can tell the data traces apart from the wireframe cube, density/surface layers, forecast overlays and the colorbar's phantom trace. It is propagated to the per-segment 2-D traces, - so a multicoloured 2-D line still reads as ONE trajectory. Documented in + so a multicolored 2-D line still reads as ONE trajectory. Documented in `docs/animation.rst` beside the forecast tags. - **New guide:** *Hierarchical DataFrames* (`docs/hierarchy.rst`), covering @@ -176,28 +176,28 @@ and a matplotlib Axes passed as `ax=` under the plotly backend. runs after the display reduce -- which is why means reach `trace_data` and never `xform_data`. -- **A plot can take its colours from an image.** +- **A plot can take its colors from an image.** `hypertools.plot.colors.image_palette(image, n_colors=6)` extracts a palette from a LOCAL image -- a path, a PIL image, or an `(H, W, 3)` array -- ordered most visually salient first. Salience is `pixel_fraction * chroma`, so a painting's vivid subject leads and its muted background follows but is kept; ordering by pixel share alone (the obvious "largest k-means cluster" rule) returns the background, which is - the whole reason this helper exists. A greyscale image has no colour to be + the whole reason this helper exists. A grayscale image has no color to be salient about, so it falls back to population order. The same extraction is reachable declaratively from any plotting call as - `palette='image:'`, on both backends and on every colour path + `palette='image:'`, on both backends and on every color path (categorical, continuous, matrix hue, and the colorbar): a categorical hue pulls one anchor per category, so the number of groups is not capped, and a continuous hue blends six anchors into a gradient exactly as any short - colour list is blended. An image with fewer distinct colours than there + color list is blended. An image with fewer distinct colors than there are categories is interpolated up rather than cycled, so no two categories - share a colour; a single-colour image raises instead of inventing them. + share a color; a single-color image raises instead of inventing them. hypertools never downloads the image -- fetch and cache it yourself, then pass the path. - **`hue_mode=` says how a matrix `hue` is read.** `'mixture'` blends each - row through `palette` as weights, one palette colour per COLUMN whatever + row through `palette` as weights, one palette color per COLUMN whatever the width, which is what a hierarchy needs to give each leaf one primary and every derived mean the blend of its children. `'rgb'` reduces the matrix to three min-max scaled channels used directly as (r, g, b), which @@ -207,14 +207,14 @@ and a matplotlib Axes passed as `ax=` under the plotly backend. `color_reduce=` raises rather than picking a winner. Documented in `docs/hierarchy.rst`. -- **`Normalize` gains `mode='isotropic'`: one shared centre and scale for the +- **`Normalize` gains `mode='isotropic'`: one shared center and scale for the whole table.** The default `mode='minmax'` rescales every column on its own and so distorts a point cloud's shape; `mode='isotropic'` subtracts the centroid and divides EVERY column by one scalar (the largest absolute deviation from the centroid), mapping the cloud into `[min, max]` with the centroid at the midpoint and its shape (angles, distance ratios) intact. - `min=-1, max=1` is exactly the "centre and scale into the unit cube" recipe - the morph gallery examples used to hand-roll. Lists share one centre and + `min=-1, max=1` is exactly the "center and scale into the unit cube" recipe + the morph gallery examples used to hand-roll. Lists share one center and scale; `return_model=True` reuse and `inverse_transform` work. - **Gallery and tutorials reorganized and completed (issue #284).** The gallery merges its duplicate pages (digits/TSNE/UMAP into one; PPCA into @@ -237,7 +237,7 @@ and a matplotlib Axes passed as `ax=` under the plotly backend. pipeline output's own coordinates (for `reduce=None` the raw columns) with fixed joint limits for animations, on both backends; `xlim=`/`ylim=` set them explicitly. `axis_scale='unit'` (the default) is unchanged and now - documented: 2-D plots are mean-centred and rescaled into [-1, 1], inside + documented: 2-D plots are mean-centered and rescaled into [-1, 1], inside a frame square of half-width 1.125, with both axes pinned to +/-1.2375 (10 % beyond the square) (GH #285). - **`ndims=1` is a time-series mode.** With `reduce=None`, each column @@ -252,7 +252,7 @@ and a matplotlib Axes passed as `ax=` under the plotly backend. distinctly and role-tagged `'truth'`, static and animated, on both backends; `truth` is validated against `t` (GH #285). - **Several forecasters on one plot.** `predict=['Kalman', 'ARIMA', 'GP']` (or - `{name: spec}`) draws one legend-labelled overlay per model, coloured from + `{name: spec}`) draws one legend-labeled overlay per model, colored from `forecast_palette`, with `forecast_fmt` per model; works with `truth=`, animations and plotly. The `return_model` bundle keys the forecasts by model name (GH #285). @@ -289,7 +289,7 @@ and a matplotlib Axes passed as `ax=` under the plotly backend. `pipeline` (GH #285). - **Title styling on every frame.** `title_kwargs=dict(size=, weight=, family=, color=, y=)` is applied by hypertools' own title updater, - including per-segment `title=` lists; `title_color=` takes one colour per + including per-segment `title=` lists; `title_color=` takes one color per segment or a callable; `title_wrap=N` hard-wraps titles (`\n` on matplotlib, `
` on plotly). A resolved `font=` now reaches per-segment animation titles too (previously only rcParams could size them) (GH #285). @@ -299,9 +299,9 @@ and a matplotlib Axes passed as `ax=` under the plotly backend. - **Legends under matrix / mixture hue.** A matrix-valued `hue=` (or `hue_mode='mixture'`) now draws a legend with one swatch per hue column instead of dropping it; `legend_kwargs=` reaches `ax.legend` and - `legend_colors=` recolours or replaces the entries (GH #285). -- **The resolved colour scale is exposed.** `return_model=True` bundles - `['colors']` (kind, palette, cmap, norm, vmin, vmax, per-group colours, + `legend_colors=` recolors or replaces the entries (GH #285). +- **The resolved color scale is exposed.** `return_model=True` bundles + `['colors']` (kind, palette, cmap, norm, vmin, vmax, per-group colors, labels) and `HyperAnimation.colors` carries the same object, so a companion panel can reuse the library's mapping (GH #285). - **Synthetic datasets from `hyp.load`.** `hyp.load('random_walk' | 'helix' | @@ -351,9 +351,9 @@ and a matplotlib Axes passed as `ax=` under the plotly backend. dispersion (or `score_metric='isc'`) before and after alignment; `hypertools.align.score.alignment_score` is the standalone form (GH #285). - **`palette=` takes a `{category: color}` dict and per-dataset palette - specs.** Unnamed categories keep their default-palette colour and unknown + specs.** Unnamed categories keep their default-palette color and unknown keys raise; a list with one palette spec per dataset (`['image:a.png', - 'image:b.png', 'viridis']`) colours each dataset from its own palette; + 'image:b.png', 'viridis']`) colors each dataset from its own palette; `image_palette()` gains `max_luminance=`/`min_luminance=`, also as `palette='image:p.png?max_luminance=0.6'` (GH #285). - **A synthetic LSL outlet.** `hypertools.io.lsl.synthetic_outlet(name, @@ -378,7 +378,7 @@ and a matplotlib Axes passed as `ax=` under the plotly backend. non-string raised. - **Input datatype handling defers to datawrangler.** The shared coercion layer (`format_data`, `get_type`/`get_dtype`, `as_dataframe`, the - `predict`/`impute` normalisation, `io.streaming.is_stream`) classifies + `predict`/`impute` normalization, `io.streaming.is_stream`) classifies inputs with `dw.zoo` predicates and converts with `dw.wrangle` instead of its own `isinstance` ladders, so polars DataFrames, LazyFrames and Series are accepted wherever pandas is -- `plot`, `reduce`, `align`, `cluster`, @@ -390,7 +390,7 @@ and a matplotlib Axes passed as `ax=` under the plotly backend. `Pipeline` steps directly), `align`, `stack`, `damage`, `apply_model`, the fitted `Normalizer`, `save`/`load`, `text2mat` and the impute backtest's `truth=`/`mask=` read any frame backend datawrangler - recognises through the shared predicates; a one-column DataFrame of + recognizes through the shared predicates; a one-column DataFrame of labels as `hue=` no longer raises `IndexError`, and `text2mat` accepts a Series of documents. A static test (`tests/test_datatype_gate.py`) keeps hand-rolled pandas/numpy type checks out of the library, and @@ -473,7 +473,7 @@ previously ambiguous or silently lossy. index type: MultiIndex` from deep inside pandas (row axis) or forecast the flattened frame (column axis). **This is deliberately asymmetric:** a ROW-hierarchical frame inside a list passed to `hyp.plot` keeps its - documented warn-and-flatten behaviour, unchanged in 1.1. Hierarchy + documented warn-and-flatten behavior, unchanged in 1.1. Hierarchy expansion is defined for a bare frame only. - **`hyp.predict` now rejects a column hierarchy whose groups do not name @@ -520,8 +520,8 @@ previously ambiguous or silently lossy. disappearing. Because `nan != nan` and pandas mints a separate NaN object per group key, keeping them was not enough on its own: a two-sector frame with a missing Market label produced two duplicate means and two `'nan'` - legend entries. Labels are now canonicalised NA-aware (`np.nan`, `None` - and `pd.NA` all normalise to one sentinel) for prefix grouping, top-level + legend entries. Labels are now canonicalized NA-aware (`np.nan`, `None` + and `pd.NA` all normalize to one sentinel) for prefix grouping, top-level uniqueness and style lookup, on both axes. The original label values are preserved in the returned keys and in the legend; the sentinel is never user-visible. @@ -659,10 +659,10 @@ input too. toolkit's error chained as the cause. - **`alpha=` was ignored by `animate='morph'`.** The value landed on the per-dataset line artists, which a morph keeps hidden, and never on the one - travelling point cloud that is drawn (plotly dropped it the same way), so + traveling point cloud that is drawn (plotly dropped it the same way), so fading the cloud meant reaching into the figure with `set_alpha` after the call. The cloud now takes the alpha on the same hold/transition schedule as - its colour: a hold draws the held dataset's alpha, a transition eases from + its color: a hold draws the held dataset's alpha, a transition eases from the departing dataset's alpha to the arriving one's, and a scalar `alpha=` is constant throughout. Plots that pass no `alpha=` are unchanged. - **Drawing into a caller-supplied `ax=` warned `Glyph 8722 (MINUS SIGN) @@ -689,7 +689,7 @@ input too. sign-flipped value; it now uses `slogdet`, identical to rounding wherever the old value was representable. - **`labels=` annotations were drawn on pyplot's current axes, not the `ax=` - passed in,** so panel labels stacked on one axes; and a colour-list + passed in,** so panel labels stacked on one axes; and a color-list colorbar (`color=['red', ...]`) raised `IndexError` (GH #285). - **`hyp.plot(docs, vectorizer='all-MiniLM-L6-v2')` crashed with the default `semantic=`/`corpus=`.** The gensim-only auto-skip of the topic-model stage @@ -704,7 +704,7 @@ input too. - **Every continuous-hue matplotlib plot rendered fully opaque**, whatever `alpha=` was set to. `_apply_multicolor_lines` never read alpha from its per-trace kwargs, and the artists carrying the alpha are exactly the - `Line2D`s it removes and replaces with a colour-graded collection. + `Line2D`s it removes and replaces with a color-graded collection. - **The `return_model=True` pipeline could not be re-applied to a column-hierarchical frame.** Its steps are fit on the frame's GROUPS, each @@ -722,10 +722,10 @@ input too. passed through. - **plotly discarded the per-trace alpha under a continuous `hue=`** for the - same figures, from the other direction: the colour serializer drops the + same figures, from the other direction: the color serializer drops the 4th channel and nothing set the trace `opacity`, so a hue plot that matplotlib drew at `alpha=0.7` rendered fully opaque on plotly. Line and - marker colours now carry the alpha on both backends (hue-coloured markers + marker colors now carry the alpha on both backends (hue-colored markers ignored `alpha=` on matplotlib too until the release review). - **With `ndims=1`, matplotlib drew the `predict=` overlay at x = 0..t** @@ -737,13 +737,13 @@ input too. now draw the continuation. - **A marker-only `fmt` (e.g. `'o'`) with `hue=` and `predict=` drew the - forecast in a different colour on each backend.** The final-observed-hue + forecast in a different color on each backend.** The final-observed-hue anchor was applied on matplotlib's line path only, and on plotly for every `fmt`. It is now on both paths on both backends. -- **plotly's 1-D marker branch drew a continuous hue in one flat colour.** - The 2-D and 3-D branches already passed the per-point colour array - through; the 1-D one fell back to the single trace colour, so all points +- **plotly's 1-D marker branch drew a continuous hue in one flat color.** + The 2-D and 3-D branches already passed the per-point color array + through; the 1-D one fell back to the single trace color, so all points came out identical while matplotlib scattered them per point. - **A hierarchy silently discarded `legend=[...]`, and `legend=False`.** @@ -751,13 +751,13 @@ input too. unconditionally, so a caller's list vanished without a word (while every SIBLING kwarg the hierarchy overrides -- `color`/`colors`, `linewidth`, `alpha` -- warns) and an explicit opt-out still drew a legend. `legend=` is - now HONOURED under a hierarchy: a list **renames the top-level groups** + now HONORED under a hierarchy: a list **renames the top-level groups** (one entry per unique top-level index value, in first-appearance order -- the same convention `linestyle=` already used; any other length raises `ValueError` naming both counts), and `legend=False` suppresses the automatic legend. `legend=True`/omitted still labels by index value. `legend=False` suppresses the LEGEND only: `colorbar=True` still names one - segment per top-level group, since the colorbar is the colour key for the + segment per top-level group, since the colorbar is the color key for the drawn groups rather than a legend. - **`names=` ALONE raised "pass dataset names via names= OR a legend= list, @@ -779,21 +779,21 @@ input too. `name=None`. Any leading-underscore label now becomes `name=None`; which traces appear in the legend is unchanged. -- **plotly and matplotlib serialized colours differently.** plotly's two - colour helpers disagreed -- one truncated each channel where the other - rounded -- so the same colour came out `rgb(219,95,87)` on matplotlib and +- **plotly and matplotlib serialized colors differently.** plotly's two + color helpers disagreed -- one truncated each channel where the other + rounded -- so the same color came out `rgb(219,95,87)` on matplotlib and `rgb(219,94,86)` on plotly, and an anchored forecast could not equal the - per-point colour it was copied from. Both round now. + per-point color it was copied from. Both round now. -- **`legend=` as an ndarray/Series/Index mislabelled every trace.** All +- **`legend=` as an ndarray/Series/Index mislabeled every trace.** All three are accepted label containers, but the per-trace length check and the label assignment tested for `list`/`tuple` only, so the whole container was handed to matplotlib as EACH artist's label -- two traces both named `['a' 'b']`, plus a matplotlib "Passing label as a length 2 sequence" warning -- while the hierarchy path handled the same containers - correctly. A `tuple` labelled the traces but missed the colorbar's + correctly. A `tuple` labeled the traces but missed the colorbar's narrower `list` test, so `legend=('A', 'B'), colorbar=True` drew a - colorbar reading `1`, `2`. Every accepted container is now normalised to a + colorbar reading `1`, `2`. Every accepted container is now normalized to a list where it is type-checked, so one rule covers them all; a 0-d array (`np.array('a')`) counts as ONE label, exactly as `legend='a'` does. @@ -825,17 +825,17 @@ Because 1.1.0 had not been published, they ship in it. complete, `attrs['best']` is `None`, `attrs['best_score']` is NaN and `attrs['beats_baseline']` is `None`; `attrs['beats_baseline']` is also `None` when the baseline row is itself incomplete. Each case warns. -- **`hyp.impute(truth=, mask=)` matches labelled data by label.** `truth` +- **`hyp.impute(truth=, mask=)` matches labeled data by label.** `truth` and `mask` were checked for shape and then compared cell by position, so a truth DataFrame with its columns or rows in another order was scored against the wrong cells without a word (an MAE of 18.83 or 1.83 where the - answer is 3.67). When the data and `truth`/`mask` are both labelled, the + answer is 3.67). When the data and `truth`/`mask` are both labeled, the same labels in a different order are now reordered to the data's, and labels that differ (or are repeated and not in identical order) raise a `ValueError` naming the axis and the labels. A default `0..n-1` index counts as labels; a polars frame is matched by column name and row position. Bare arrays are compared by position as before, so - `truth.to_numpy()` is the way to compare two differently-labelled frames + `truth.to_numpy()` is the way to compare two differently-labeled frames cell for cell. A wrong-shaped array `truth` now gets hypertools' shape message instead of a pandas internals error. - **A backtest pairs forecast and held-out columns by label.** A custom @@ -863,7 +863,7 @@ Because 1.1.0 had not been published, they ship in it. - **`explore=True` hover labels stay inside the window.** The label was always drawn up and to the left of the hovered point, so a point near the left edge of a native window had its label cut off. It now opens toward - the centre of the axes. + the center of the axes. - **plotly names and groups every leaf of a nested dataset list by its group.** For `hyp.plot([[a, b], [c, d]], backend='plotly')` only each group's first leaf carried the group's label; the others fell back to @@ -909,28 +909,28 @@ Because 1.1.0 had not been published, they ship in it. `'truth'` legend entry is on every frame, and static plots and `animate='spin'` still draw it in full. -- **Default forecast group colours no longer repeat an observed line's - colour.** `forecast_hue=`/`forecast_cluster=` without +- **Default forecast group colors no longer repeat an observed line's + color.** `forecast_hue=`/`forecast_cluster=` without `forecast_palette=` started the palette over, so forecast group 0 was - drawn in exactly dataset 0's colour: `hyp.plot([a, b, a + 2, b + 2], + drawn in exactly dataset 0's color: `hyp.plot([a, b, a + 2, b + 2], predict='Kalman', t=6, forecast_cluster='KMeans', forecast_n_clusters=2)` - drew its two groups in `#db5f57` and `#57d3db`, the colours of datasets - 0 and 2. The groups now continue the figure's `palette=` past the colour + drew its two groups in `#db5f57` and `#57d3db`, the colors of datasets + 0 and 2. The groups now continue the figure's `palette=` past the color slots the observed data takes (its datasets or `hue=`/`cluster=` groups, plus any an earlier call took on a reused `ax=`): the same call draws `#dbc257` and `#57db80`, the free slots of 'hls' at 8, and `palette='Set2'` - gives Set2's fifth and sixth colours. Same on both backends, static and + gives Set2's fifth and sixth colors. Same on both backends, static and animated; `panels=` resolves the default against the whole grid, so each - label keeps the single-axes figure's colour. An explicit + label keeps the single-axes figure's color. An explicit `forecast_palette=` overrides exactly as before. -- **A continuous `hue=` no longer repaints an explicitly coloured +- **A continuous `hue=` no longer repaints an explicitly colored forecast on matplotlib.** Under a continuous `hue=` the matplotlib - backend recoloured every forecast in its trace's final hue colour, + backend recolored every forecast in its trace's final hue color, discarding `forecast_hue=`/`forecast_cluster=`/`forecast_palette=` (and a - colour letter in `forecast_fmt=`), static and animated, while plotly kept - them -- the two backends drew the same call in different colours. The - explicit colour now wins on both, as `forecast_fmt=`'s docs say. + color letter in `forecast_fmt=`), static and animated, while plotly kept + them -- the two backends drew the same call in different colors. The + explicit color now wins on both, as `forecast_fmt=`'s docs say. - **No leftover "install the extra first" instructions.** Every optional dependency goes through the on-demand installer, and the stale prose @@ -956,7 +956,7 @@ Because 1.1.0 had not been published, they ship in it. sooner). Also fixed the `hypertools.load` docstring example, which failed under Sphinx's doctest builder (`NameError: hypertools`); the docs CI job now runs that builder. -- **Plotly animation export honours `hyp.set_autoinstall(False)` and +- **Plotly animation export honors `hyp.set_autoinstall(False)` and raises the documented exception types.** The frames of a plotly animation's GIF/PNG/video export are rendered in a separate worker process, which now inherits the caller's installation setting: with @@ -989,14 +989,14 @@ Because 1.1.0 had not been published, they ship in it. them; a superseded direct call is now released. A handle made for a `with` block is never collapsed before it is entered, so creating a block in one thread and entering it later is safe. -- **The plotly backend honours the colour letter of a data `fmt=` string** +- **The plotly backend honors the color letter of a data `fmt=` string** (`'r-'`, `['g--', 'b:']`) exactly as matplotlib does, including animated - plots and `panels=` cells; it drew the palette colour before. + plots and `panels=` cells; it drew the palette color before. - **Matrix colormaps, image palettes and mixed `manip` lists.** The - matrix colormap honours every inherited Colormap operation (integer + matrix colormap honors every inherited Colormap operation (integer sampling, `resampled()`, `reversed()`, `set_under`/`set_over`, bad and NaN entries per element); image palettes interpolate exactly at any - count, so more than 256 categories still get distinct colours; a polars + count, so more than 256 categories still get distinct colors; a polars `forecast_hue` Series is partitioned under `panels=` like a pandas one; and `manip` lists mixing an unnamed array with named frames keep every frame's index (dated or irregular) while lists of named frames pass @@ -1015,10 +1015,10 @@ Because 1.1.0 had not been published, they ship in it. relabel anything. A 1-D array is one column (n observations of one feature) for `hyp.manip`, as it already was for `hyp.normalize`, `hyp.reduce` and the Manipulator classes; `hyp.manip` used to read it as - a single row. `MatrixColormap` follows matplotlib's full extreme-colour + a single row. `MatrixColormap` follows matplotlib's full extreme-color rules (under/over/bad keep the alpha they were set with, `-inf`/`+inf` are under/over rather than bad, and an `alpha=` override reaches the - extremes but not a transparent bad colour). `legend=` accepts a polars + extremes but not a transparent bad color). `legend=` accepts a polars Series (any series-like) of labels, on both backends. - **A repeated metric in `metrics=` raises `ValueError` that says which metric is repeated.** `hyp.predict(..., holdout=k, metrics=['mae', 'MAE'])` @@ -1046,13 +1046,13 @@ Because 1.1.0 had not been published, they ship in it. (`hyp.predict(x, return_model=True)`) now reach each panel as its own entry, in both `panel_fit` modes and on both backends, matching the single-axes figure; previously they raised inside the panel or drew - every forecast in the first colour. Shared-fit grids also hand back + every forecast in the first color. Shared-fit grids also hand back their one fitted pipeline as `bundle['pipeline']` and in every `panel_models[i]['pipeline']`, so held-out data can be projected without refitting (it was `None`). -- **`panels=` keeps forecast labels that share a colour.** `forecast_hue=` / +- **`panels=` keeps forecast labels that share a color.** `forecast_hue=` / `forecast_cluster=` with a `forecast_palette=` that gives two labels the - same colour (`['red', 'red']`, or a palette name that cycles) raised + same color (`['red', 'red']`, or a palette name that cycles) raised `ValueError: palette= supplies N color(s)` inside the panels; each panel now receives one palette slot per label, matching the single-axes figure. - **`panels=` on 2-column or 1-column data with the default `ndims=` draws @@ -1068,16 +1068,16 @@ Because 1.1.0 had not been published, they ship in it. across a `color=` or categorical `hue=` call. Independent panels mixing one- and three-column datasets draw the series as row index against value on the 3-D cell's floor instead of crashing. -- **`panels=` keeps the joint figure's cluster colours, forecasts narrow +- **`panels=` keeps the joint figure's cluster colors, forecasts narrow panels in their own space, and a marker-only hue no longer advances the - palette.** Shared clustered panels keep the joint cluster-to-colour + palette.** Shared clustered panels keep the joint cluster-to-color mapping and legend names when a slice lacks a cluster (two panels each drew red); a 1-/2-column panel of a mixed-width independent grid forecasts, reads `truth=` and reports its bundle on its own analyzed rows (the individual call's numbers; the display padding used to feed the forecaster) and only its drawing is lifted into the 3-D cell; a categorical `hue=` with a marker-only fmt consumes no palette slot on a - composed axes/figure/cell, and its group colours beat a fmt colour letter + composed axes/figure/cell, and its group colors beat a fmt color letter on the marker path as on the line path. - **`panels=` decides each cell's projection from the analyzed data** (after `manip=`/`pipeline=`/`reduce=`), not the raw column count: a Delay-expanded @@ -1116,7 +1116,7 @@ Because 1.1.0 had not been published, they ship in it. 3-D cells back the camera off so the cube stays inside a narrow cell; room for the legends/colorbars is reserved beside every cell (the default-sized figure is widened by it, an - explicit `size=` is honoured verbatim). + explicit `size=` is honored verbatim). - **`panels=` colorbars on matplotlib take their room from their own panel.** A `colorbar=True` panel grid ran the single-axes figure-widening placement once per panel, stacking every colorbar over @@ -1130,7 +1130,7 @@ Because 1.1.0 had not been published, they ship in it. further than a narrow cell needed (the constant was the cube's width relative to its OWN height rather than the scene's), so three 3-D panels sat far apart with small cubes and titles floating well above - them. 3-D cells are now square and centred (an `Axes3D`'s equal box + them. 3-D cells are now square and centered (an `Axes3D`'s equal box aspect), the gaps are `tight_layout`'s 20 px (40 px between 2-D cells, for tick labels), each row reserves what its titles need, and the cube fills its cell within a few pixels of the matplotlib panel's. @@ -1138,18 +1138,18 @@ Because 1.1.0 had not been published, they ship in it. colorbars.** Three 10-entry legends beside three default-size panels shrank the cubes to 1.3 in; the matplotlib figure now widens by the same 1.1 in per column the plotly grid reserves, and an explicit - `size=` is honoured verbatim. -- **`palette=` colour lists behave as in 1.0.0 again.** A list shorter than + `size=` is honored verbatim. +- **`palette=` color lists behave as in 1.0.0 again.** A list shorter than the dataset count cycles when there is no `hue=`; an empty palette raises `ValueError` instead of `StopIteration`; a per-dataset list whose entries are `{category: color}` dicts merges them by category name; and any other per-dataset form under a categorical `hue=` raises an error carrying the real dataset and category counts. -- **NaN in a continuous `hue=` no longer poisons the colour range.** The - `vmin`/`vmax` of the colour scale and the colorbar are computed over the +- **NaN in a continuous `hue=` no longer poisons the color range.** The + `vmin`/`vmax` of the color scale and the colorbar are computed over the finite values only. -- **Legend and colour details.** `legend_kwargs={'fontsize': ...}` is - honoured together with `font=`; `bundle['colors']['categories']` contains +- **Legend and color details.** `legend_kwargs={'fontsize': ...}` is + honored together with `font=`; `bundle['colors']['categories']` contains RGB tuples for the blend kind when `legend_colors=` is passed; and a nested `hue=` whose sub-list does not match its dataset is identified in the error. @@ -1226,7 +1226,7 @@ Because 1.1.0 had not been published, they ship in it. (floats are matplotlib day numbers on both); no `'dataset 1'` y label after a reducing `reduce=`; a 3-D `ax=` with `ndims<=2` raises instead of drawing a flat 3-D line; a `TimedeltaIndex` is drawn in a readable - unit with a labelled axis. + unit with a labeled axis. - **NaN rows introduced by a trailing `Smooth(center=False)`** are reported as the manip stage's doing, with the `min_periods=1` hint, instead of the all-features-missing message. @@ -1250,10 +1250,10 @@ Because 1.1.0 had not been published, they ship in it. - **Isomap fits stay quiet about scipy's sparse-matrix efficiency.** The dozen `SparseEfficiencyWarning`s scikit-learn's graph completion triggers are silenced during the fit; sklearn's own warning about a - disconnected neighbour graph (the user's `n_neighbors`) still shows. + disconnected neighbor graph (the user's `n_neighbors`) still shows. - **A `truth=` overlay's legend glyph shows its markers.** The truth is drawn as a solid line with a marker on every observation, but its - `'truth'` legend entry was a bare solid line in the trace's own colour, + `'truth'` legend entry was a bare solid line in the trace's own color, identical to the observed trace's entry. The curve now keeps the marker (drawing none of its own) so the legend can tell them apart. - **2-D `density=` layers fade out inside their own grid.** Each KDE grid @@ -1289,18 +1289,18 @@ Because 1.1.0 had not been published, they ship in it. dotted line. The single-model form now lists its forecast once, under the model's name (the name `hyp.predict(x, model=[spec])` gives it), static and animated, on both backends, in the order data, forecasts, - truth. The entry's glyph wears the forecasts' own style, in their colour + truth. The entry's glyph wears the forecasts' own style, in their color when they share one and in a neutral gray when one model's forecasts of - several datasets are drawn in several colours (the first dataset's - colour used to pose as the model's). -- **A collection of models keeps each dataset's colour and takes a - linestyle per model.** `predict=['Kalman', 'ARIMA']` coloured every - forecast by model from a `'husl'` palette whose first colour was the + several datasets are drawn in several colors (the first dataset's + color used to pose as the model's). +- **A collection of models keeps each dataset's color and takes a + linestyle per model.** `predict=['Kalman', 'ARIMA']` colored every + forecast by model from a `'husl'` palette whose first color was the first dataset's own, so two datasets under two models were four lines in two indistinguishable pairs, and which series a forecast continued - could not be read at all. Forecasts now inherit their dataset's colour + could not be read at all. Forecasts now inherit their dataset's color (as the single-model form always did) and cycle solid, dashed, dotted, - dash-dot by model; `forecast_palette=` opts back into one colour per + dash-dot by model; `forecast_palette=` opts back into one color per model, and `forecast_fmt=` still replaces the cycle. - **`truth=` on plotly marks every observation, not every vertex.** The antialiased truth curve carried a marker on each of its ~900 drawn @@ -1308,16 +1308,16 @@ Because 1.1.0 had not been published, they ship in it. rows only, at the size the matplotlib overlay draws them. - **A caller's axes draw in the palette, and a second call continues it.** `hyp.plot(x, ax=ax)` and every matplotlib `panels=` cell drew - the datasets in the colour cycle their figure was created with + the datasets in the color cycle their figure was created with (matplotlib's default blue/orange) while `return_model`'s `colors` and the plotly grid reported the hls palette; the axes now take the palette. Drawing a second time into the same axes or plotly figure restarted the palette, so two composed walks were both red; the second call now continues it from where the first stopped, on both backends. -- **A recoloured forecast keeps its trace's alpha.** `forecast_palette=`, - `forecast_hue=` and `forecast_cluster=` recoloured the forecasts and +- **A recolored forecast keeps its trace's alpha.** `forecast_palette=`, + `forecast_hue=` and `forecast_cluster=` recolored the forecasts and still halved their alpha, so Set1 forecasts at 0.35 over a hierarchy's - 0.7 leaves could not be found; the colour is what tells them apart, so + 0.7 leaves could not be found; the color is what tells them apart, so they are drawn at the trace's own alpha. The forecast legend glyph is never drawn below 0.8 alpha either (it copied its forecasts' 0.35 and vanished). @@ -1342,7 +1342,7 @@ Because 1.1.0 had not been published, they ship in it. the right run.** One dataset split into two runs under two models gives two forecasts for two runs, so the step that matches each forecast to its run -- which only ran when the counts differed -- was skipped and - forecast i continued run i: Kalman took the earlier run's colour, ARIMA + forecast i continued run i: Kalman took the earlier run's color, ARIMA the final run's. It runs for every collection under regrouping now. The animated modes also looked the reveal schedule up by forecast index rather than by source dataset, so two models x regrouping x @@ -1352,23 +1352,23 @@ Because 1.1.0 had not been published, they ship in it. `hyp.predict([a, b], return_model=True)` forecaster refused as a dataset-count mismatch; `Forecaster.for_dataset(i)` now binds the view the schedule needs. -- **Plotly honours a colour letter and markers in `forecast_fmt=`.** +- **Plotly honors a color letter and markers in `forecast_fmt=`.** `forecast_fmt='ro:'` drew red dotted forecasts with round markers on - matplotlib and inherited-colour dotted lines without markers on plotly, + matplotlib and inherited-color dotted lines without markers on plotly, static and animated, legend keys included. -- **Plotly animations keep a recoloured forecast's alpha too.** The - animated branch computed the halved alpha before the recolouring rule +- **Plotly animations keep a recolored forecast's alpha too.** The + animated branch computed the halved alpha before the recoloring rule applied, so `forecast_palette=` forecasts animated at 0.35 while the static figure drew them at 0.7. - **A second call into the same plotly grid cell continues the palette**, as a second call into the same matplotlib axes does. -- **Plotly forecast legend keys compare colour, not opacity.** With +- **Plotly forecast legend keys compare color, not opacity.** With `alpha=[1, .4]` and an all-red forecast palette every key turned gray because the RGBA strings differed only in alpha. - **`legend_colors=` keeps its contract beside forecasts.** Explicit `(label, color)` pairs define the legend outright, so no forecast or `truth` entry is added to them (and on plotly the data traces stay out - of it too); a plain colour list is applied to the FINAL legend, after + of it too); a plain color list is applied to the FINAL legend, after the forecast/truth entries, instead of being refused against the data entries alone. - **Matplotlib panel legends clear their colorbars.** A panel with @@ -1380,13 +1380,13 @@ Because 1.1.0 had not been published, they ship in it. of being replaced by the default placement beside the cell, and re-laying out the grid keeps the top margin a multi-line title had reserved. -- **A `forecast_fmt=` colour letter survives a regrouped animation.** +- **A `forecast_fmt=` color letter survives a regrouped animation.** Under `hue=`/`cluster=` the animated modes repaint each live forecast - in its head run's colour unless the colour is pinned, and only + in its head run's color unless the color is pinned, and only `forecast_hue=`/`forecast_cluster=`/`forecast_palette=` counted as pinning: `forecast_fmt='ro:'` forecasts animated cyan under red legend - keys on matplotlib, and plotly's per-frame colours halved the alpha a - recoloured forecast keeps. + keys on matplotlib, and plotly's per-frame colors halved the alpha a + recolored forecast keeps. - **Mixture-hue legends list forecasts and `truth`.** A matrix `hue=` builds its legend from swatches (clearing `legend=` on the way), and the forecast/truth entries were only added when `legend=` was still @@ -1434,7 +1434,7 @@ Because 1.1.0 had not been published, they ship in it. - **A `hue=` surface matches the points beneath it.** Each hull vertex blended every point in its dataset with inverse-squared-distance weights; in 3-D the many distant points outweighed the near ones, so the hull took - the dataset's washed-out mean colour. Vertices now blend their nearest + the dataset's washed-out mean color. Vertices now blend their nearest points, on both backends. - **Markers sit on the observations.** `'o-'`, `markers=` and `forecast_fmt='ro:'` put a marker on every antialiased vertex (about 900 @@ -1443,12 +1443,12 @@ Because 1.1.0 had not been published, they ship in it. nearest each sample), on both backends. An explicit `marker=` wins over the fmt marker on matplotlib, and a continuous hue with `'o-'` in 1-D/2-D shows its markers on plotly. -- **Hue transparency.** Continuous-hue markers honour `alpha=` on both - backends, and translucent plotly 3-D lines keep their colour instead of +- **Hue transparency.** Continuous-hue markers honor `alpha=` on both + backends, and translucent plotly 3-D lines keep their color instead of washing out to cyan. - **Plotly hover labels name what you point at.** They read "trace 0"; every data trace now carries its legend label (category, dataset, series column, - model or 'truth'), a lone unlabelled dataset shows only its coordinates, + model or 'truth'), a lone unlabeled dataset shows only its coordinates, and animated legends no longer grow entry by entry. - **Plotly subplot cells.** Colorbars no longer land on the next cell, an untitled call keeps the cell's title, a dimensionality mismatch raises a @@ -1461,18 +1461,18 @@ Because 1.1.0 had not been published, they ship in it. - **Plotly date axes show the same dates in every time zone.** Numeric dates were drawn in the viewer's local time, so a series starting at midnight on 1 January began on the evening of 31 December in New York. -- **Composing into `ax=` no longer repeats a palette colour.** `'hls'` drawn - 2 + 2 now gives the four-colour `'hls'` set, and the bundle's `colors` and - the colorbar show the colours actually drawn. -- **Dict-list palettes colour marker plots.** `fmt='o'` ignored a per- +- **Composing into `ax=` no longer repeats a palette color.** `'hls'` drawn + 2 + 2 now gives the four-color `'hls'` set, and the bundle's `colors` and + the colorbar show the colors actually drawn. +- **Dict-list palettes color marker plots.** `fmt='o'` ignored a per- dataset list of `{category: color}` dicts. - **Per-dataset and nested `labels=` survive `hue=`/`cluster=`** instead of crashing on both backends; label arrays and Series are accepted. - **Legends.** A nested-list input's legend names its outer groups instead - of four leaves in two colours; cluster and integer-hue line legends list + of four leaves in two colors; cluster and integer-hue line legends list categories in order (0, 1, 2), as the marker path did; `legend=False` wins over `names=`; `panels=` splits a plain `legend_colors=` list per panel; - and `legend_colors=` accepts one colour per data entry beside forecast and + and `legend_colors=` accepts one color per data entry beside forecast and truth entries. - **Label connectors and box edges are visible on matplotlib.** Under the seaborn style they were drawn white, so labels floated with no visible @@ -1482,8 +1482,8 @@ Because 1.1.0 had not been published, they ship in it. fresh process. - **Two-column data draws into a 2-D `ax=`** instead of raising "the plot is 3D". -- **0-255 colour lists raise `ValueError`.** `palette=[[255, 128, 0], ...]` - was silently read as a data matrix, reordering and rescaling the colours; +- **0-255 color lists raise `ValueError`.** `palette=[[255, 128, 0], ...]` + was silently read as a data matrix, reordering and rescaling the colors; the error says to divide by 255 or pass a DataFrame. - **The NaN-hue warning counts observations** (it counted antialiased vertices) and points at the caller's line. @@ -1498,9 +1498,9 @@ Because 1.1.0 had not been published, they ship in it. now raises `ValueError`. - **Marker-only `hue=`/`cluster=` always refuses forecasts and warns**, even when the category count equals the dataset count (the forecasts were - silently drawn in the wrong category's colour). -- **The 'truth' legend key is gray when truths span several colours**, - instead of always showing dataset 0's colour. + silently drawn in the wrong category's color). +- **The 'truth' legend key is gray when truths span several colors**, + instead of always showing dataset 0's color. - **Animated forecasts on two-column data no longer crash** with "too many values to unpack". - **`xlim=(None, date)` works on date axes**; the open side takes the data @@ -1542,7 +1542,7 @@ Because 1.1.0 had not been published, they ship in it. dict spec now reach `manip`/`align` models, and a spec's `'args'` reach streaming and `text2mat` models. - **`hyp.plot(x, pipeline=p)` draws the pipeline's clusters.** A fitted - trailing cluster step colours the figure with the fit figure's colours; it + trailing cluster step colors the figure with the fit figure's colors; it was dropped silently. - **Aligner classes accept arrays.** `HyperAlign().fit(xs).transform(ys)` on a list of NumPy arrays, or a single array, raised "Unsupported datatype"; @@ -1592,23 +1592,23 @@ Because 1.1.0 had not been published, they ship in it. the rows unchanged, and reveal timing and frame counts are unchanged. - **Every morph transition frame moves.** Transitions sampled their own endpoints, so a 2-frame transition only repeated the hold clouds. - Transition frames now fall strictly between the clouds in position, colour + Transition frames now fall strictly between the clouds in position, color and `alpha=`. The default morph dot is 4 pt on both backends (it was 1.5 pt, sub-pixel on plotly). - **Titles set in an `on_frame=` callback are visible on 3-D animations.** With no `title=`, the `plot()` docstring's own example drew its title above the canvas on matplotlib and cut it off on plotly; `on_frame=` now reserves the title margin. -- **`companion=` panels use the trajectory's colour** instead of +- **`companion=` panels use the trajectory's color** instead of matplotlib's default blue; an explicit `color=` still wins. - **Short streams warn about clamped samples.** The warning needed 20 post- head samples, so a short stream could draw most of its points on the box surface silently; the clamped fraction is now checked again when streaming stops. - **Plotly animations keep a continuous hue on the moving data.** 3-D - windows were painted in the trajectory's first colours, and 2-D lines + windows were painted in the trajectory's first colors, and 2-D lines never animated: the whole trajectory stayed on screen while one segment - flickered. Heads and trails now carry their own colours in every reveal + flickered. Heads and trails now carry their own colors in every reveal style. - **Plotly 3-D lines are as thick as you ask.** WebGL drew Scatter3d lines at half the requested width; they now match the 2-D line and matplotlib, @@ -1643,7 +1643,7 @@ Because 1.1.0 had not been published, they ship in it. and return `fig=None`, so `show=False` now costs the (small) drawing time as well. - **matplotlib `axis_scale='data'` plots have no grid.** Seaborn's - `whitegrid` style, which hypertools draws under, left a grey grid on + `whitegrid` style, which hypertools draws under, left a gray grid on data-scale axes (static, animated and `ndims=1` series plots) that the plotly backend never drew. Both backends now draw none. A caller's own `ax=` keeps whatever grid it already has. @@ -1658,7 +1658,7 @@ Because 1.1.0 had not been published, they ship in it. configured instance such as `reduce=PCA(n_components=2)`, and a dict spec that pins it (`{'model': 'PCA', 'kwargs': {'n_components': 2}}`), were reduced to that one dimensionality at every point of the sweep while the - curve labelled the points 2, 3, 4, ... (on 60 x 6 random data: 0.739 four + curve labeled the points 2, 3, 4, ... (on 60 x 6 random data: 0.739 four times, against 0.739, 0.852, 0.930, 0.974 for `reduce='PCA'`; also in 1.0). The sweep's dimensionality now always wins: an unfitted instance is cloned for each point with `n_components` set to that point, keeping its @@ -1692,7 +1692,11 @@ Because 1.1.0 had not been published, they ship in it. absolute coordinate deviation from the centroid, which depends on the cloud's orientation (9.03 for a 200-point 2-D cloud, 7.21 for the same cloud turned 45 degrees). The shape is preserved either way; the - behaviour is unchanged. + behavior is unchanged. +- **Gallery pages name example files by their repository path.** A warning + an example raises is printed on its gallery page, and it used to start + with the build machine's absolute path to the example. It now reads + `examples/plot_impute.py:43: UserWarning: ...`. ### Documented limitations @@ -1714,7 +1718,7 @@ Because 1.1.0 had not been published, they ship in it. `trace_metadata` is `None`. There is no public `plot(feature_correspondence=...)` in 1.1, so opting out stays visible at the call site. -- The order of the **groups** is not neutralised the way the order of +- The order of the **groups** is not neutralized the way the order of features within a group is. Groups become datasets, `reduce=` row-stacks every dataset and fits one model on the stack, so group order is row order in that stack -- and a reducer whose fit depends on it embeds a @@ -1731,16 +1735,16 @@ Because 1.1.0 had not been published, they ship in it. did before 1.1 -- so it is documented (`hyp.plot`'s `x` entry, docs/hierarchy.rst) and pinned by a test rather than worked around. A canonical group order would mean inventing a total ordering over - arbitrary, mixed-type, NA-bearing labels, and would make a labelled + arbitrary, mixed-type, NA-bearing labels, and would make a labeled hierarchy behave differently from the equivalent positional list of datasets. Pass `reduce='PCA'` when block order must not matter. - Continuous `hue=` over a **row** hierarchy is still warned-and-ignored; - only column hierarchies honour it in 1.1. + only column hierarchies honor it in 1.1. - Under a **categorical** `hue=`/`cluster=` regrouping, an animated live - forecast takes the colour of the run drawing the head, which is what the - viewer actually sees, so its colour can change as the head crosses a + forecast takes the color of the run drawing the head, which is what the + viewer actually sees, so its color can change as the head crosses a category boundary. Under a continuous `hue=` a forecast instead takes its - source trajectory's final observed hue colour, animated and static alike + source trajectory's final observed hue color, animated and static alike (see *Added*). - Duplicate innermost feature names inside one group are **kept** rather than rejected or de-duplicated, and matched across groups by @@ -1760,14 +1764,14 @@ Because 1.1.0 had not been published, they ship in it. Small, additive plotting features and fixes. Public APIs are unchanged; three changes alter how existing figures LOOK: smoothed lines (`antialias=True`, the new default, under **New features**) and the two -items under **Changed**. Where 1.1.0 later refined one of these behaviours, +items under **Changed**. Where 1.1.0 later refined one of these behaviors, the entry below says so. > 1.0.1 was never published on its own. These changes were developed as a > patch release and now ship as part of 1.1.0, which is what `pyproject.toml` > declares; they are kept in their own section because they are separable > from the hierarchy work above. Because 1.0.1 is not a version anyone can -> install, every guide and docstring that dates one of these behaviours dates +> install, every guide and docstring that dates one of these behaviors dates > it to **1.1.0**; this section is the only user-facing place that names > the patch line. If you are upgrading from 1.0.0, everything from here down > to the `## 1.0.0` heading is new to you as well. @@ -1820,7 +1824,7 @@ the entry below says so. of standing still. Because the data is static -- all of it known before the first frame, merely revealed over time -- every forecast the animation will ever draw is computed up front. Two things follow: the whole fan is folded - into the plot's centre/scale statistics, so it lands inside the cube **by + into the plot's center/scale statistics, so it lands inside the cube **by construction** and is never clipped or clamped; and each frame is a table lookup, so `ani.save()` and `to_jshtml()` replay identically no matter what order matplotlib asks for frames in. Fits are memoized per (dataset, @@ -1833,7 +1837,7 @@ the entry below says so. axis to forecast along. - **`forecast_trail=`: keep earlier forecasts on screen as a fading fan.** The - forecast analogue of `chemtrails=`. With `predict=` and a time-progressing + forecast analog of `chemtrails=`. With `predict=` and a time-progressing animation, `forecast_trail=True` retains the last 16 forecasts (an int sets the cap), each in its dataset's style, exactly like the live one, at an alpha that decays with age from that dataset's live forecast alpha down to @@ -1878,18 +1882,18 @@ the entry below says so. trace projected forward at half its alpha -- and each of these replaces exactly one aspect of it, so observed and forecast data may differ in style, grouping, palette, or any combination. (1.1.0 refines this: a - forecast recoloured by `forecast_palette=`, `forecast_hue=` or + forecast recolored by `forecast_palette=`, `forecast_hue=` or `forecast_cluster=` keeps its trace's full alpha, and a collection of models takes one linestyle per model; see *Fixed during the release review*.) **`forecast_cluster=` clusters the forecast ENDPOINTS**, so a forecast's - colour answers *which of these series are heading to the same place?* -- + color answers *which of these series are heading to the same place?* -- a question the observed data cannot answer, which is the point of a separate kwarg. It deliberately does not recluster the observed data (inheriting that assignment is what the default already gives, so the kwarg would be a no-op), nor cluster every predicted point (one forecast - would change colour along its own short path), nor flatten whole + would change color along its own short path), nor flatten whole trajectories (sensitive to `t`, to sampling and to dimensionality, where an endpoint has one stable meaning). Endpoints are taken in the space the figure draws, after `reduce=`/`align=`. @@ -1898,7 +1902,7 @@ the entry below says so. full-history forecasts (the ones `return_model=True` returns), and stay fixed for every frame -- they are not reclustered as the reveal progresses. Cluster labels are arbitrary names for groups, so per-frame - reclustering would let a forecast change colour whenever a fit nudged its + reclustering would let a forecast change color whenever a fit nudged its endpoint across a boundary, and would repaint a retained `forecast_trail=` fan drawn under the old grouping. @@ -1926,9 +1930,9 @@ the entry below says so. used to advance at once -- so one trajectory animated in several disjoint time windows simultaneously (three runs of a 30-row dataset were all 27% drawn on frame 3 of 12). Runs of one input dataset now share a single reveal - clock, so the head sweeps the trajectory once and changes colour at each + clock, so the head sweeps the trajectory once and changes color at each category boundary, matching both the un-regrouped and `order='serial'` - behaviour. Animations without `hue=`/`cluster=` are unchanged row for row. + behavior. Animations without `hue=`/`cluster=` are unchanged row for row. A `precog=` trail on a not-yet-reached run now shows that run's whole future rather than a single stray point. @@ -1936,8 +1940,8 @@ the entry below says so. the fit succeeded and the forecasts were returned in the `return_model=True` bundle with `drawn=False`, but no overlay was drawn. Each frame's forecast is fit from exactly the observations visible for that dataset. A live forecast - inherits the colour of the run drawing the head; a retained - `forecast_trail=` member keeps the colour it was fit with; + inherits the color of the run drawing the head; a retained + `forecast_trail=` member keeps the color it was fit with; `forecast_hue=`/`forecast_cluster=`/`forecast_palette=` override both with a grouping fixed for the whole animation. Both backends draw it identically at every frame. Marker-only categorical regrouping (which groups globally by @@ -1954,7 +1958,7 @@ the entry below says so. This uncovered a further way a forecast could vanish. Under a continuous `hue=` the overlays were drawn and then **deleted**: the code that swaps - data lines for a colour-graded `LineCollection` cleared every line on the + data lines for a color-graded `LineCollection` cleared every line on the axes, forecasts included. Letting forecasts reach the drawing layer under regrouping for the first @@ -1968,7 +1972,7 @@ the entry below says so. An interim build had refused them with a reason instead of failing silently, and plotly's static block, which fires whenever there is no per-frame schedule, had warned "no forecast is drawn" and then drawn the - full-history forecast, visible from frame 0; both behaviours are + full-history forecast, visible from frame 0; both behaviors are superseded. - **`return_model=True` reports forecasts it could not draw, and says so.** @@ -2048,15 +2052,15 @@ the entry below says so. - **`predict=` forecast overlays now inherit the style of the observed trace they continue.** A forecast reads as the *same series projected forward*, - so it takes that trace's **colour, linestyle and linewidth**, and differs + so it takes that trace's **color, linestyle and linewidth**, and differs only in transparency: `forecast_alpha = observed_alpha * 0.5` (an unset `alpha=` is matplotlib's opaque 1.0, so the default forecast alpha is `0.5`). Per-dataset styling carries through dataset by dataset -- `alpha=[1.0, 0.4]` gives forecasts at `[0.5, 0.2]`, and a dotted dataset - gets a dotted forecast. (1.1.0 refines this: a forecast recoloured by + gets a dotted forecast. (1.1.0 refines this: a forecast recolored by `forecast_palette=`, `forecast_hue=` or `forecast_cluster=` is drawn at its trace's own alpha, and a collection of models keeps each dataset's - colour and cycles the linestyle per model; see *Fixed during the release + color and cycles the linestyle per model; see *Fixed during the release review*.) This is a **visible change to existing forecast figures**, and it @@ -2181,14 +2185,14 @@ the entry below says so. `simplify=` above for which of your data actually reaches the plot. - **`title=` is now actually visible on animated 3-D matplotlib plots.** - `animate_plot3D` maximises the 3-D axes to the full canvas (so a rotating + `animate_plot3D` maximizes the 3-D axes to the full canvas (so a rotating zoomed cube never clips at some rotation angles) -- but that left zero margin above the axes for `axes.set_title()` to render into, so both a scalar `title=` and a per-segment `title=` list rendered entirely off-canvas (the title *state* was always correct; only the pixels were missing). Matplotlib animated 3-D plots now reserve a top strip -- sized to the real measured title-line height, growing the figure rather than - shrinking the maximised axes -- whenever a title will actually be drawn; + shrinking the maximized axes -- whenever a title will actually be drawn; a titleless 3-D animation, a static 3-D plot, and 2-D animations (which never had this problem) are all unaffected. The plotly backend already had the equivalent fix. diff --git a/RELEASE_CHECKLIST.md b/RELEASE_CHECKLIST.md index c5a8d8ba..048fe098 100644 --- a/RELEASE_CHECKLIST.md +++ b/RELEASE_CHECKLIST.md @@ -138,6 +138,23 @@ detached tag checkout — the notebook migrator detects the branch via do NOT commit afterward** — any later commit changes HEAD, so you must rebuild the gallery and re-publish (the gate fails until you do). The same gate re-runs on the master push (step 4) and the tag (step 5). +- [ ] **Publish the built gallery for Read the Docs to reuse.** Read the + Docs ends a build after 15 minutes and executing the gallery takes about + 25, so its build fetches the gallery you just built + (`docs/fetch_prebuilt_gallery.py`, run from `.readthedocs.yaml`) and + sphinx-gallery skips every example whose source is unchanged. From the + repo root, with the same `docs/auto_examples` and a clean tracked tree: + `python scripts/publish_prebuilt_gallery.py --push` + It replaces the single commit on the `docs-gallery-v1.1.0` branch (a + forced push, by design: the tree is about 100 MB) and refuses a gallery + that is incomplete or names this machine's path. The same "no commits + afterward" rule applies: the manifest pins `source_commit` to HEAD. +- [ ] **Verify it:** + `HYPERTOOLS_REQUIRE_RELEASE=1 pytest tests/test_release_readiness_gate.py::test_release_gate_prebuilt_gallery_is_published_for_this_commit` + → green (`raw.githubusercontent.com` can serve the previous manifest for + up to five minutes after a republish). After the `master` push in step 4, + open the Read the Docs build for `latest` and confirm it finished and its + `pre_build` step printed `51 of 51 examples are current`. ## 3. Build + verify artifacts locally (do NOT upload yet) @@ -216,14 +233,12 @@ same artifacts you verify are the ones you publish. (Publication is a MANUAL step today — there is no CI job for it; a `contents: write` `publish-gallery-notebooks` job on master/tags could automate it once token/environment handling is decided.) -- [ ] **Read the Docs: build BOTH `latest` and the `v1.1.0` tag by hand.** - Pushes do not reach RTD at the moment: the GitHub → RTD webhook - (`https://readthedocs.org/api/v2/webhook/github/hypertools/`) last - answered HTTP 400 in GitHub's delivery log, and RTD has built nothing - since the 1.0.0 release (`latest`/`stable` at 647ce929, 2026-07-24), - although `master` moved on 2026-09-05. Re-sync the GitHub - integration in the RTD admin (Admin → Integrations, - https://app.readthedocs.org/dashboard/hypertools/integrations/), then +- [ ] **Read the Docs: confirm `latest` and the `v1.1.0` tag both built.** + Pushes reach RTD again: both `master` pushes on 2026-10-09 started + builds (before that the 2017 webhook had no secret and RTD answered + HTTP 400). A build that fails with "Build terminated due to time out" + means the pre-built gallery was not fetched or was stale (step 2): the + build's `pre_build` output says which. If a build is missing, trigger builds of `latest` (master) and of the `v1.1.0` tag from https://app.readthedocs.org/projects/hypertools/builds/, and point the "stable"/default version at `v1.1.0`, replacing `v1.0.0`. Verify: @@ -294,6 +309,7 @@ run with `HYPERTOOLS_REQUIRE_RELEASE=1` by the `release-gate` CI job on | CHANGELOG heading | `## (YYYY-MM-DD)` — version == pyproject, a REAL calendar date (not `(unreleased)`, not `2026-99-99`), and not earlier than the release commit's date (a stale draft date fails) | | generated gallery (`docs-clean` job) | every built `docs/auto_examples/*.ipynb` carries the PyPI spec (covers every published notebook, at the build layer) | | gallery Colab notebooks published | `docs-notebooks/v/manifest.json` present, its `source_commit` == the release HEAD, its inventory == the built gallery, and the branch's actual `.ipynb` set (one GitHub tree request) == the manifest — so stale (old-RC), partial, or mismatched publishes all fail. Requires step 2's publish to have run FROM the release commit, BEFORE the master/tag push — see the deadlock note there. | +| pre-built gallery published | `docs-gallery-v/manifest.json` present, its `source_commit` == the release HEAD, its example md5s == the examples in the checkout | Always-on (every branch): no notebook installs the defunct `dev-1.0-refactor`; all tutorial branch-installs share one branch; every README image is a single diff --git a/docs/_gallery_log_filter.py b/docs/_gallery_log_filter.py index a357d199..373c5ebe 100644 --- a/docs/_gallery_log_filter.py +++ b/docs/_gallery_log_filter.py @@ -47,3 +47,34 @@ def install(logger_name=GALLERY_LOGGER): """Attach the filter to sphinx-gallery's logger (idempotent enough for a single docs build). Called from conf.py's ``setup(app)``.""" logging.getLogger(logger_name).addFilter(TransientDocLinkFetchFilter()) + + +def relative_warning_paths(root): + """Make Python warnings name files under ``root`` by their path relative + to it, e.g. ``examples/plot_impute.py:43: UserWarning: ...``. + + sphinx-gallery prints a warning an example raises into that example's + output block, and Python's default format starts with the absolute path + of the file that warned. On a gallery page that is the build machine's + path to the checkout: noise to a reader, and different on every machine + that builds the docs. Returns the installed formatter; installing twice + is harmless (conf.py calls this before every example). + """ + import os + import warnings + + current = warnings.formatwarning + if getattr(current, '_hypertools_root', None) == root: + return current + prefix = os.path.join(os.path.abspath(root), '') + + def formatwarning(message, category, filename, lineno, line=None): + text = current(message, category, filename, lineno, line) + if filename.startswith(prefix) and text.startswith(filename): + text = (filename[len(prefix):].replace(os.sep, '/') + + text[len(filename):]) + return text + + formatwarning._hypertools_root = root + warnings.formatwarning = formatwarning + return formatwarning diff --git a/docs/animation.rst b/docs/animation.rst index c97ac52d..a1d89e4e 100644 --- a/docs/animation.rst +++ b/docs/animation.rst @@ -257,26 +257,26 @@ Where artists are **shared**, anything you set persists until something overwrites it:: # MATPLOTLIB ONLY (set_color is a matplotlib Artist method). - # Shared artists, so this colours the WHOLE animation, not frame 0. + # Shared artists, so this colors the WHOLE animation, not frame 0. def broken(ctx): if ctx.frame == 0: ctx.artists[0].set_color('red') def correct(ctx): - ctx.artists[0].set_color(COLOURS[ctx.frame]) # set it every frame + ctx.artists[0].set_color(COLORS[ctx.frame]) # set it every frame Where they are **per-frame**, the very same conditional does the opposite -- it touches an independent payload that only that frame keeps:: # PLOTLY ONLY -- ctx.artists are that frame's traces, and # parallel/serial/window/morph frames are independent, so this - # colours ONLY frame 0. + # colors ONLY frame 0. def also_broken(ctx): if ctx.frame == 0: ctx.artists[0].line.color = 'red' def also_correct(ctx): - ctx.artists[0].line.color = COLOURS[ctx.frame] + ctx.artists[0].line.color = COLORS[ctx.frame] Writing a callback as though each frame had its own artists is the common mistake, and writing one as though they were shared is the mirror image of @@ -297,8 +297,8 @@ call, so the attribute is still assigned on every frame:: HIGHLIGHT, DEFAULT = 'red', 'steelblue' def highlight_one_frame(ctx): # correct on both backends - colour = HIGHLIGHT if ctx.frame == TARGET else DEFAULT - ctx.artists[0].set_color(colour) # matplotlib spelling + color = HIGHLIGHT if ctx.frame == TARGET else DEFAULT + ctx.artists[0].set_color(color) # matplotlib spelling Assign on every invocation and none of this can bite you. @@ -445,7 +445,7 @@ Animating static data means every observation is known before drawing starts, so every forecast the animation will *ever* draw is knowable up front. Two things follow, and both are contracts rather than implementation details: -- The whole fan is folded into the plot's centre/scale statistics, so it lands +- The whole fan is folded into the plot's center/scale statistics, so it lands inside the cube **by construction**. Nothing is clipped or clamped. - Each frame is a table lookup, so ``ani.save()`` and ``to_jshtml()`` replay identically no matter what order matplotlib asks for frames in. @@ -456,7 +456,7 @@ Fits are memoized per (dataset, revealed-count), so a 900-frame animation of a Keeping earlier forecasts on screen ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -``forecast_trail=`` is the forecast analogue of ``chemtrails=``: earlier +``forecast_trail=`` is the forecast analog of ``chemtrails=``: earlier forecasts stay visible and fade, so a viewer can see how the prediction *changed* as history accumulated. @@ -477,7 +477,7 @@ How a forecast is styled ~~~~~~~~~~~~~~~~~~~~~~~~ A forecast is the *same series projected forward*, so it inherits the identity -of the observed trace it continues -- the same **colour**, **linestyle** and +of the observed trace it continues -- the same **color**, **linestyle** and **linewidth** -- and differs only in transparency: .. code-block:: text @@ -488,8 +488,8 @@ An observed line with no ``alpha=`` set is matplotlib's *opaque*, i.e. 1.0, so the default forecast alpha is 0.5. Per-dataset styling carries through dataset by dataset: ``alpha=[1.0, 0.4]`` gives forecasts at ``[0.5, 0.2]``, and a dotted dataset gets a dotted forecast. Both backends apply the identical -rule. On plotly the forecast trace copies the colour, width and dash, and -carries the alpha in the ``rgba(...)`` line colour of a 2-D trace or in the +rule. On plotly the forecast trace copies the color, width and dash, and +carries the alpha in the ``rgba(...)`` line color of a 2-D trace or in the trace ``opacity`` of a 3-D one; either way the value is echoed in ``meta['hyp_forecast_alpha']``. @@ -503,24 +503,24 @@ trace ``opacity`` of a 3-D one; either way the value is echoed in a floor proportional to it -- so a retained forecast is never more opaque than the live forecast it decays from, however faint the dataset. -A forecast given its **own colour** -- by ``forecast_palette=``, -``forecast_hue=``, ``forecast_cluster=``, or a colour letter in -``forecast_fmt=`` -- keeps its trace's alpha instead of halving it: the colour +A forecast given its **own color** -- by ``forecast_palette=``, +``forecast_hue=``, ``forecast_cluster=``, or a color letter in +``forecast_fmt=`` -- keeps its trace's alpha instead of halving it: the color is then what tells it apart, and fading it as well hid it among translucent traces. A **collection of models** (``predict=['Kalman', 'ARIMA', ...]``) draws one -overlay per model on every trace. Each keeps its dataset's colour (which series +overlay per model on every trace. Each keeps its dataset's color (which series it continues) and takes a linestyle per model -- solid, dashed, dotted, dash-dot, in model order -- so the two questions are answered by two -encodings; ``forecast_palette=`` colours by model instead, and +encodings; ``forecast_palette=`` colors by model instead, and ``forecast_fmt=`` (one entry per model) replaces the cycle. Every ``predict=`` form lists its forecast **once in the legend**, static or animated, under the model's name (the same name ``hyp.predict(x, model=[...])`` gives it), after the data entries and before ``truth``. The key wears the -forecasts' linestyle and their colour when they share one; when one model's -forecasts of several datasets wear several colours the key is a neutral gray, +forecasts' linestyle and their color when they share one; when one model's +forecasts of several datasets wear several colors the key is a neutral gray, and it is never drawn below 0.8 alpha, so it stays legible however faint the forecasts are. @@ -530,7 +530,7 @@ Animated forecasts under ``hue=``/``cluster=`` When ``hue=`` or ``cluster=`` splits a trajectory into per-category runs, each run is drawn as its own trace, but the reveal still follows the **dataset**: one run finishes as the next begins, so the trajectory sweeps once and changes -colour as it crosses a category boundary. (Before 1.1.0 every run advanced +color as it crosses a category boundary. (Before 1.1.0 every run advanced at once, so one trajectory animated in several places simultaneously.) A forecast is fit per dataset from exactly the observations on screen, so it means the same thing it does without ``hue=``: @@ -541,8 +541,8 @@ same thing it does without ``hue=``: hyp.plot(data, '-', predict='Kalman', t=10, hue=categories) hyp.plot(data, '-', predict='Kalman', t=10, hue=categories, animate=True) -A live forecast inherits the colour of the run drawing the head, and therefore -changes colour with it; a retained ``forecast_trail=`` member keeps the colour +A live forecast inherits the color of the run drawing the head, and therefore +changes color with it; a retained ``forecast_trail=`` member keeps the color it was drawn with, so the fan records the history rather than being repainted. Pass ``forecast_hue=``, ``forecast_cluster=`` or ``forecast_palette=`` to give the forecasts a grouping of their own; those are resolved once from the @@ -590,11 +590,11 @@ Everything they do not name stays inherited. :widths: 30 70 * - Setting - - What a forecast's colour means + - What a forecast's color means * - *(nothing)* - the identity of the observed trace it continues * - ``forecast_palette=`` - - one colour per forecast from a palette of its own (one per *model* + - one color per forecast from a palette of its own (one per *model* for a collection), drawn at the trace's own alpha * - ``forecast_hue=`` - a grouping you supply, one value per forecast (see below) @@ -608,25 +608,25 @@ wants one value per leaf group **plus** one per derived mean. ``forecast_fmt=`` sets the line/marker style, in the same format-string grammar as ``fmt``, and changes nothing else -- unless the string carries a -colour letter (``'r:'``), which recolours the forecast too, on both backends: +color letter (``'r:'``), which recolors the forecast too, on both backends: .. code-block:: python - # dotted forecasts, still in each trace's own colour + # dotted forecasts, still in each trace's own color hyp.plot(data, '-', predict='Kalman', t=10, forecast_fmt=':') - # observed data grouped by condition; forecasts coloured by destination + # observed data grouped by condition; forecasts colored by destination hyp.plot(data, '-', predict='Kalman', t=10, hue=conditions, forecast_cluster='KMeans', forecast_n_clusters=3, forecast_palette='viridis') ``forecast_cluster=`` clusters the forecast **endpoints** -- where each series -is predicted to end up -- so its colours answer a question the observed data +is predicted to end up -- so its colors answer a question the observed data cannot: *which of these are heading to the same place?* That is why it does not simply recluster the observed data; inheriting the observed assignment is what the default already gives, so defining it that way would make the kwarg a no-op. Nor does it cluster every predicted point (one forecast would then -change colour along its own short path) or whole flattened trajectories +change color along its own short path) or whole flattened trajectories (sensitive to ``t``, to sampling and to dimensionality, where an endpoint has one stable meaning). Endpoints are taken in the space the figure draws, after ``reduce=``/``align=``, so the grouping matches the geometry on screen. @@ -634,12 +634,12 @@ one stable meaning). Endpoints are taken in the space the figure draws, after In an **animation**, forecast endpoint groups are resolved once from the full-history forecasts -- the same forecasts ``return_model=True`` hands back in the model bundle -- and stay fixed for every frame. They are not -reclustered per frame, so the colours hold still while the forecast geometry +reclustered per frame, so the colors hold still while the forecast geometry evolves. That is a deliberate choice rather than an implementation detail. Cluster labels are arbitrary names for groups, so reclustering each frame would let -a forecast change colour whenever the fit shifted a point across a boundary, +a forecast change color whenever the fit shifted a point across a boundary, and would repaint a whole retained ``forecast_trail=`` fan whose earlier members were drawn under the old grouping. A fixed assignment also keeps a saved animation identical to a played one, which is the same reason the @@ -678,7 +678,7 @@ per drawn dataset) that a variable number of forecast overlays would violate. The *observed* trajectories are tagged the same way, and for the same reason: neither ``ax.collections`` nor ``fig.data`` is a list of data artists. On -matplotlib a multicoloured (continuous ``hue=``) trace is a +matplotlib a multicolored (continuous ``hue=``) trace is a ``Line3DCollection`` carrying ``collection._hyp_trace_index``, alongside the six wireframe collections that draw the bounding cube; on plotly every data trace carries ``trace.meta['hyp_trace_index']``, alongside the cube trace, any @@ -687,12 +687,12 @@ carrier -- none of which is named. Both tags are the trace's index in the drawn data, so a callback can pair a trace with its source without counting positions. -A multicoloured trace also carries its ``alpha=`` **inside** those per-point -colours, on both backends: matplotlib folds it into the segment colours of the +A multicolored trace also carries its ``alpha=`` **inside** those per-point +colors, on both backends: matplotlib folds it into the segment colors of the collection that replaces the line artist (an alpha left on the discarded -artist would simply be lost), and plotly serialises the line's colour array as -``rgba(...)`` for the same reason. Per-point **marker** colours carry no alpha -on either backend -- a hue-coloured scatter is drawn at full opacity. +artist would simply be lost), and plotly serializes the line's color array as +``rgba(...)`` for the same reason. Per-point **marker** colors carry no alpha +on either backend -- a hue-colored scatter is drawn at full opacity. What ``animate='morph'`` does ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/conf.py b/docs/conf.py index 56b60fd5..2515cbc9 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -394,6 +394,11 @@ def _quiet_gallery_only_warnings(gallery_conf, fname): 'ignore', category=UserWarning, message=r'explore=True shows labels on hover, which needs an ' r'interactive matplotlib backend') + # a warning an example does raise is printed on its page: name the file + # by its path in the repository, not the build machine's path to it + from _gallery_log_filter import relative_warning_paths + relative_warning_paths(os.path.dirname(os.path.dirname( + os.path.abspath(__file__)))) # Gallery page order. sphinx-gallery's default (`NumberOfCodeLinesSortKey`) diff --git a/docs/fetch_prebuilt_gallery.py b/docs/fetch_prebuilt_gallery.py new file mode 100644 index 00000000..64012055 --- /dev/null +++ b/docs/fetch_prebuilt_gallery.py @@ -0,0 +1,158 @@ +#!/usr/bin/env python +"""Put the release's PRE-BUILT example gallery into ``docs/auto_examples`` +before sphinx runs, so a Read the Docs build does not execute the gallery. + +Executing the 51 gallery examples takes about 25 minutes; Read the Docs ends a +build after 15. The release pipeline already builds the gallery from the +release commit (RELEASE_CHECKLIST.md), and +``scripts/publish_prebuilt_gallery.py`` publishes that tree to the +``docs-gallery-v`` branch. This script fetches it. sphinx-gallery then +finds, for every example, a ``.py.md5`` that matches the example's +source and skips executing it; an example whose source has changed since the +gallery was published has no matching md5 and is executed as usual. + +Run from ``.readthedocs.yaml`` (``pre_build``). It never fails the build: with +no published gallery for this version it says so and sphinx executes +everything. ``--require`` turns "missing" and "stale" into a non-zero exit, +for checking a published gallery by hand. + + python docs/fetch_prebuilt_gallery.py [--require] [--remote URL] + +Standard library only: it runs before the docs requirements matter and is +imported by the publish script and the tests. +""" + +from __future__ import annotations + +import argparse +import hashlib +import json +import os +import re +import shutil +import subprocess +import sys +import tempfile + +REPO_URL = 'https://github.com/ContextLab/hypertools.git' +BRANCH_PREFIX = 'docs-gallery-v' +GALLERY_DIRNAME = 'auto_examples' +MANIFEST_NAME = 'manifest.json' +_VERSION_RE = re.compile(r'^[0-9][0-9A-Za-z.+\-]*$') + + +def branch_for(version): + """The branch that holds the pre-built gallery for ``version``.""" + if not _VERSION_RE.match(version or '') or '..' in version: + raise ValueError(f'unsafe version: {version!r}') + return f'{BRANCH_PREFIX}{version}' + + +def project_version(repo_root): + """The release version, from ``pyproject.toml``.""" + with open(os.path.join(repo_root, 'pyproject.toml'), + encoding='utf-8') as f: + m = re.search(r'(?m)^version\s*=\s*["\']([^"\']+)["\']', f.read()) + if not m: + raise ValueError('pyproject.toml has no version') + return m.group(1) + + +def source_md5(path): + """md5 of an example's source, computed the way sphinx-gallery computes + the one it compares against ``.py.md5`` (text mode, so the hash is + the same on every platform's line endings).""" + with open(path, 'rt', errors='surrogateescape', encoding='utf-8') as f: + content = f.read().encode(errors='surrogateescape', encoding='utf-8') + return hashlib.md5(content).hexdigest() + + +def example_md5s(examples_dir): + """``{'plot_basic.py': md5, ...}`` for every example script.""" + return {name: source_md5(os.path.join(examples_dir, name)) + for name in sorted(os.listdir(examples_dir)) + if name.endswith('.py')} + + +def stale_examples(examples_dir, gallery_dir): + """Examples sphinx-gallery would execute given ``gallery_dir``: those with + no recorded md5 there, or one that differs from the example's source.""" + stale = [] + for name, md5 in example_md5s(examples_dir).items(): + recorded = os.path.join(gallery_dir, name + '.md5') + try: + with open(recorded, encoding='utf-8') as f: + current = f.read().strip() == md5 + except OSError: + current = False + if not current: + stale.append(name) + return stale + + +def fetch(repo_root, remote=REPO_URL, version=None, out=print): + """Copy the published gallery for ``version`` into + ``/docs/auto_examples``. + + Returns ``(status, stale)``: status is ``'fetched'``, ``'missing'`` (no + branch for this version) or ``'present'`` (a gallery is already there and + is left alone); ``stale`` lists the examples sphinx will still execute + (``None`` when nothing was fetched). + """ + version = version or project_version(repo_root) + branch = branch_for(version) + examples_dir = os.path.join(repo_root, 'examples') + target = os.path.join(repo_root, 'docs', GALLERY_DIRNAME) + if os.path.isdir(target) and os.listdir(target): + out(f'pre-built gallery: {target} already exists; leaving it alone') + return 'present', stale_examples(examples_dir, target) + + work = tempfile.mkdtemp(prefix='docs-gallery-') + try: + clone = subprocess.run( + ['git', 'clone', '--quiet', '--depth', '1', '--branch', branch, + remote, work], capture_output=True, text=True) + source = os.path.join(work, GALLERY_DIRNAME) + if clone.returncode != 0 or not os.path.isdir(source): + out(f'pre-built gallery: none published for {version} (branch ' + f'{branch} of {remote}); sphinx will execute every example.\n' + f'{clone.stderr.strip()}') + return 'missing', None + manifest_path = os.path.join(work, MANIFEST_NAME) + commit = None + if os.path.isfile(manifest_path): + with open(manifest_path, encoding='utf-8') as f: + commit = json.load(f).get('source_commit') + if os.path.isdir(target): + os.rmdir(target) # empty, checked above + shutil.copytree(source, target) + finally: + shutil.rmtree(work, ignore_errors=True) + + stale = stale_examples(examples_dir, target) + n = len(example_md5s(examples_dir)) + out(f'pre-built gallery: fetched {branch} (built from {commit}); ' + f'{n - len(stale)} of {n} examples are current') + if stale: + out('pre-built gallery: sphinx will execute the examples that changed ' + 'since it was published: ' + ', '.join(stale)) + return 'fetched', stale + + +def main(argv=None): + here = os.path.dirname(os.path.abspath(__file__)) + ap = argparse.ArgumentParser(description=__doc__.split('\n\n')[0]) + ap.add_argument('--repo-root', default=os.path.dirname(here)) + ap.add_argument('--remote', default=REPO_URL) + ap.add_argument('--require', action='store_true', + help='exit 1 unless a gallery was fetched and every ' + 'example in it is current') + args = ap.parse_args(argv) + status, stale = fetch(args.repo_root, remote=args.remote) + if args.require and (status == 'missing' or stale): + return 1 + return 0 + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/docs/hierarchy.rst b/docs/hierarchy.rst index 4856ca19..a2362b2f 100644 --- a/docs/hierarchy.rst +++ b/docs/hierarchy.rst @@ -288,10 +288,10 @@ never drift out of step with the trace it describes: >>> bool(np.allclose(aux[2], (aux[0] + aux[1]) / 2)) True -Colours are mapped over the concatenation of every trace's values -- leaves +Colors are mapped over the concatenation of every trace's values -- leaves and means together -- so one scale spans the figure and a ``colorbar=`` reads against all of it. The hierarchy still sets linewidth, alpha and -labels; only its colours step aside. Forecast overlays inherit the colour +labels; only its colors step aside. Forecast overlays inherit the color of the trace they continue, taken at the anchor point. A flat array sized to the **total drawn observations** is rejected, not @@ -319,7 +319,7 @@ Matrix hue: one blend per observation A per-leaf sequence may be **2-D**. Then each row is a set of **mixture weights** over the palette, and the observation is drawn in the blend those weights describe. This is the form that lets the hierarchy's own arithmetic -choose the colours: a mean trace averages its members' weights, and the mean +choose the colors: a mean trace averages its members' weights, and the mean of mixture weights is itself a mixture weight -- so give each leaf one *primary* and every parent comes out a *secondary* without anything computing it. @@ -341,16 +341,16 @@ The rules, in full: * weights are **normalized to sum to 1**, so only the ratio between components shows. Halving every weight in a row draws the identical - colour -- a second quantity needs its own palette entry (a black one, say, + color -- a second quantity needs its own palette entry (a black one, say, for "darker = larger"), it cannot ride on the total magnitude; -* **negative** entries have no colour meaning, so each row is shifted by its - own minimum: a signed matrix is coloured by within-row *contrast*; -* the palette must supply at least one colour **per column**. A shorter +* **negative** entries have no color meaning, so each row is shifted by its + own minimum: a signed matrix is colored by within-row *contrast*; +* the palette must supply at least one color **per column**. A shorter palette raises; a longer one leaves components unused; * every per-leaf matrix must have the **same width** -- they share one palette; -* a **non-finite** entry draws that observation neutral grey and warns. A - mean is the element-wise mean of its members, so one ``NaN`` greys the +* a **non-finite** entry draws that observation neutral gray and warns. A + mean is the element-wise mean of its members, so one ``NaN`` grays the leaf *and every ancestor mean* at that row; * by default the **width decides**: more than 3 columns, or any explicit ``color_reduce=``, switches to the literal-RGB route instead -- the matrix @@ -439,8 +439,8 @@ own label: >>> build_hierarchy_styles(traces)['labels'] ['G1', 'G2'] -Colour is assigned per **top-level** index value, so every trace descending -from one top-level group shares its colour and is distinguished by weight +Color is assigned per **top-level** index value, so every trace descending +from one top-level group shares its color and is distinguished by weight and opacity instead. @@ -478,7 +478,7 @@ position at each timepoint. **Some kwargs are refused, and some are ignored.** ``cluster=`` and ``n_clusters=`` raise ``ValueError`` on **either** axis -- both would fight -the hierarchy's colour assignment -- and the remedy differs by axis, which +the hierarchy's color assignment -- and the remedy differs by axis, which is why the two messages differ. ``df.reset_index(drop=True)`` flattens a ROW hierarchy, but it does not touch a column ``MultiIndex``, so a column hierarchy needs ``df.columns = df.columns.map('_'.join)`` instead: @@ -509,8 +509,8 @@ refused, with the same message: a ``UserWarning``, since the hierarchy owns them. A ``linestyle=`` **list** must have exactly one entry per top-level group. -``legend=`` is the one overridden kwarg that is *honoured* rather than -warned away -- colour, width and alpha encode the hierarchy's structure, so +``legend=`` is the one overridden kwarg that is *honored* rather than +warned away -- color, width and alpha encode the hierarchy's structure, so a caller's value would contradict the drawing, but legend text names groups the hierarchy has no opinion about. A **list** renames the top-level groups (one entry per unique top-level value, in first-appearance order, exactly @@ -518,7 +518,7 @@ like ``linestyle=``); ``legend=False`` suppresses the automatic legend; and ``legend=True`` (or omitting it) labels the groups with the index values themselves. ``legend=False`` suppresses the *legend* only -- ``colorbar=True`` still shows one named segment per top-level group, because the colorbar is -the colour key for the drawn groups rather than a second legend: +the color key for the drawn groups rather than a second legend: .. doctest:: @@ -602,8 +602,8 @@ list is therefore rejected -- but **asymmetrically**: ... print(str(error).split('. ')[0]) hyp.predict received a list whose element 0 is a DataFrame with a row MultiIndex -The asymmetry is deliberate. `hypertools.plot`'s row behaviour is -documented and depended upon, so it is preserved; its column behaviour was +The asymmetry is deliberate. `hypertools.plot`'s row behavior is +documented and depended upon, so it is preserved; its column behavior was never pinned (it silently flattened to a single line), so rejecting it is purely additive. `hypertools.predict` had nothing to preserve on either axis -- a row-hierarchical frame in a list raised a ``TypeError`` from deep @@ -621,7 +621,7 @@ Return shapes ``return_model=True`` gives back a bundle whose two data entries answer different questions. -``xform_data`` is the **analysed pipeline output**, one entry per analysed +``xform_data`` is the **analyzed pipeline output**, one entry per analyzed input dataset -- for a hierarchy, one per leaf. ``trace_data`` is the final **pre-center/pre-scale plotted trajectories**: for a hierarchy, the leaves followed by the per-level means. Means are presentation artifacts built in @@ -683,10 +683,10 @@ grouping is still what makes the answer meaningful.) Name matching applies to a **bare hierarchical frame**, and only to that. A *list* is taken as already grouped and is matched positionally -- its -members ARE the datasets, whether they are arrays or labelled DataFrames -- +members ARE the datasets, whether they are arrays or labeled DataFrames -- so ``pipeline.transform([leaf_a, leaf_b])`` never reorders columns for you. That is the same positional contract a list has always had elsewhere in -hypertools; hand the pipeline the frame if you want the labels honoured. +hypertools; hand the pipeline the frame if you want the labels honored. Given a frame, features are matched to the fitted pipeline **by name**, on the same terms they are matched across groups, so reordering the innermost @@ -787,7 +787,7 @@ pair ``([f0, f1, ...], [m0, m1, ...])`` rather than a list of pairs. ['return', 'volatility', 'momentum'] -Fitted model behaviour +Fitted model behavior ----------------------- Hierarchical forecasting needs one model per group, so `hypertools.predict` @@ -799,7 +799,7 @@ states ownership explicitly. **The object you pass is never mutated**, and :widths: 34 66 * - ``model=`` - - Behaviour per group + - Behavior per group * - a name, a class, or a dict spec - one independent model is **fitted per group** * - an **unfitted** instance @@ -873,7 +873,7 @@ so nothing degrades silently when you switch. [(5, 3), (5, 3), (5, 3)] The per-level linewidth, alpha and legend rules, the continuous-hue -colouring and the per-trace forecast overlays are all applied by both +coloring and the per-trace forecast overlays are all applied by both backends. Animated hierarchical plots work on both as well. @@ -1030,7 +1030,7 @@ Group order, which is a different question ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Everything above is about correspondence **within** a group. The order of -the **groups** is a separate matter, and it is *not* neutralised: groups +the **groups** is a separate matter, and it is *not* neutralized: groups become datasets, ``reduce=`` row-stacks every dataset and fits **one** model on the stack (that is what makes the space shared), so group order is row order in that stack. A reducer whose fit depends on row order will @@ -1093,7 +1093,7 @@ It is documented rather than worked around for two reasons, neither of which is "existing figures would move". Imposing a canonical group order would mean inventing a total ordering over arbitrary hierarchy labels -- mixed types, missing values, tuples of both -- and every choice there is arbitrary. -And it would make a labelled hierarchy behave differently from the +And it would make a labeled hierarchy behave differently from the equivalent list of datasets, which has always been positional, adding one more semantic distinction between two spellings of the same plot. Pass ``reduce='PCA'`` when block order must not matter; it is an explicit, diff --git a/docs/pipeline_order.rst b/docs/pipeline_order.rst index 04157a76..eec41a39 100644 --- a/docs/pipeline_order.rst +++ b/docs/pipeline_order.rst @@ -58,7 +58,7 @@ they are drawn as a side branch rather than as ordinary stages. See - **Mean traces are built after reduce/align**, in the plotted space, from the already-transformed leaves. That is why they appear in ``trace_data`` and never in ``xform_data``: they are presentation artifacts of the - drawing step, not analysed input datasets. Averaging in the plotted space + drawing step, not analyzed input datasets. Averaging in the plotted space is also what makes a mean sit where the eye expects it -- between its members on screen. diff --git a/docs/tutorials.rst b/docs/tutorials.rst index 5a22800c..b24135d6 100644 --- a/docs/tutorials.rst +++ b/docs/tutorials.rst @@ -202,8 +202,8 @@ Three library calls: ``hyp.reduce`` takes each sector (a months-by-stocks matrix of growth curves, four or five stocks each) to three dimensions on its own, ``hyp.align(..., model='HyperAlign')`` hyperaligns the six paths into one shared space, and ``hyp.plot`` draws them with a seventh, heavier path --- the market, their mean -- coloured through the mixture hue by each -sector's share of the basket's capitalisation. The title is the current +-- the market, their mean -- colored through the mixture hue by each +sector's share of the basket's capitalization. The title is the current date, tinted by the basket's trailing-twelve-month return, and the camera makes three turns over one minute of 26 years. Prices from Yahoo Finance, share counts from the SEC. (For the column-MultiIndex route to a market @@ -225,18 +225,18 @@ The figure from the HyperTools paper in one ``hyp.plot`` call: monthly temperatures for twenty cities are twenty *features* of one trajectory, not twenty datasets, so 138 years become a single path that sweeps with the seasons and drifts with the century. A continuous ``hue=`` (the -average temperature across the cities) colours it on a blue-cold / +average temperature across the cities) colors it on a blue-cold / red-hot scale with a native colorbar; ``manip='Smooth'``, ``normalize='across'`` and ``chemtrails=True`` are the only other keywords. One ``on_frame`` hook keeps two companion panels and a month/year title in step with the head of the path over the two-minute -orbit: a world map with each city coloured by that month's temperature, +orbit: a world map with each city colored by that month's temperature, and the mean temperature against time, drawn segment by segment on the -same colour scale. +same color scale. .. image:: _static/thumbnails/sphx_glr_animate_weather_decades_thumb.gif :width: 200 - :alt: A century of twenty cities' temperatures as one trajectory, coloured blue-cold to red-hot + :alt: A century of twenty cities' temperatures as one trajectory, colored blue-cold to red-hot .. toctree:: :maxdepth: 2 @@ -249,16 +249,16 @@ The shape of a conversation, revealed one turn at a time Raw dialogue in: each turn of the *Mad Tea-Party* is a list of word windows, and the turns are one list of lists of strings handed to a single ``hyp.plot`` call, so every turn is its own trajectory through one shared -space. ``vectorizer=`` embeds, a categorical ``hue=`` colours by speaker +space. ``vectorizer=`` embeds, a categorical ``hue=`` colors by speaker with a native legend, ``order='serial'`` reveals one turn at a time with ``chemtrails=True``, and a per-turn ``title=`` shows the line being spoken, -wrapped when long, in the speaker's colour. The recency fade across turns -and the title colour run on the public ``on_frame`` hook and read the +wrapped when long, in the speaker's color. The recency fade across turns +and the title color run on the public ``on_frame`` hook and read the schedule the library publishes; thirty seconds, two camera turns. .. image:: _static/thumbnails/sphx_glr_animate_conversation_thumb.gif :width: 200 - :alt: The Mad Tea-Party revealed one turn at a time, each path coloured by speaker + :alt: The Mad Tea-Party revealed one turn at a time, each path colored by speaker .. toctree:: :maxdepth: 2 @@ -272,7 +272,7 @@ Raw text in, five clouds out: a paragraph per painting is cut into word windows and handed to ``hyp.plot`` as a list of five lists of strings, so the nesting is the grouping. ``vectorizer='all-MiniLM-L6-v2'`` embeds every window, ``reduce='UMAP'`` puts them in one shared space, ``labels=`` names -each cloud and ``animate='spin'`` orbits it. Each cloud's colour comes from +each cloud and ``animate='spin'`` orbits it. Each cloud's color comes from its real canvas through ``image_palette``, which orders clusters by salience rather than size, with one legibility floor on top. Beside the box, each painting's name with its artist and year, the description that @@ -280,7 +280,7 @@ was embedded, and a thumbnail of the canvas. .. image:: _static/thumbnails/sphx_glr_animate_painting_embeddings_thumb.gif :width: 200 - :alt: Five clouds of painting-description embeddings spinning in 3-D, each in its canvas's colour + :alt: Five clouds of painting-description embeddings spinning in 3-D, each in its canvas's color .. toctree:: :maxdepth: 2 @@ -291,8 +291,8 @@ Palette order, and a data matrix as a palette ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ``image_palette`` lists a canvas's clusters most salient first, and that is -still the colour a dataset leads with when a painting stands for it in a -per-dataset list. Used as the palette of one plot, though, the same colours +still the color a dataset leads with when a painting stands for it in a +per-dataset list. Used as the palette of one plot, though, the same colors are put in a deterministic order -- by value, dark to bright, so a continuous ``hue=`` reads as a gradient -- and ``palette_sort=`` (or ``?sort=`` inside the spec) picks ``'value'``, ``'hue'``, ``'lightness'``, ``'columns'`` or @@ -300,9 +300,9 @@ the spec) picks ``'value'``, ``'hue'``, ``'lightness'``, ``'columns'`` or reduces it to three dimensions (``palette_reduce=``, default ``'PCA'``, with ``palette_manip=``/``palette_normalize=``/``palette_align=`` passed through), scales each component to an RGB channel, sorts the rows along the first -component and resamples the result to however many colours the plot needs. A +component and resamples the result to however many colors the plot needs. A 2-D array with three or four columns and every value in [0, 1] is still read -as a list of colours:: +as a list of colors:: import numpy as np import hypertools as hyp @@ -314,7 +314,7 @@ as a list of colours:: hyp.plot(walk, hue=np.arange(len(walk)), palette=weights) # PCA, sorted along PC1 hyp.plot(walk, hue=np.arange(len(walk)), palette=weights, palette_reduce='FastICA', palette_sort='hue') - # an image's colours, ordered by hue rather than by value: + # an image's colors, ordered by hue rather than by value: # hyp.plot(walk, hue=np.arange(len(walk)), palette='image:starry_night.jpg?sort=hue') Morphing through the shapes zoo diff --git a/docs/tutorials/animate_forecast.ipynb b/docs/tutorials/animate_forecast.ipynb index b22ac48b..c9cb2f34 100644 --- a/docs/tutorials/animate_forecast.ipynb +++ b/docs/tutorials/animate_forecast.ipynb @@ -55,11 +55,11 @@ "\n", "Three keywords restyle the forecasts without touching the observed paths:\n", "`forecast_hue=` groups the forecasts (the two Old World regions share a\n", - "colour, the Americas have their own), `forecast_palette=` gives that\n", - "grouping its own colours, and `forecast_fmt=` draws every forecast dashed.\n", + "color, the Americas have their own), `forecast_palette=` gives that\n", + "grouping its own colors, and `forecast_fmt=` draws every forecast dashed.\n", "Everything they do not name is inherited from the trace a forecast\n", - "continues. A forecast that inherits its trace's colour is drawn at half\n", - "the trace's alpha; these carry their own colours from\n", + "continues. A forecast that inherits its trace's color is drawn at half\n", + "the trace's alpha; these carry their own colors from\n", "`forecast_palette=`, so each current forecast is drawn at full opacity,\n", "and with `forecast_trail=True` only the earlier fits fade.\n", "\n", @@ -236,7 +236,7 @@ " # shared space; `predict=` refits on every distinct revealed history\n", " # and `forecast_trail=` keeps the earlier fits as a fading fan. The\n", " # three `forecast_*` keywords restyle the forecasts only: the two Old\n", - " # World regions' forecasts share a colour, the Americas' has its own,\n", + " # World regions' forecasts share a color, the Americas' has its own,\n", " # all three are dashed, and each still continues the path it belongs\n", " # to. `slow_warning_seconds=None` silences the long-schedule notice:\n", " # the 180 fits this clip needs measured about 6 s, a known wait.\n", diff --git a/docs/tutorials/conversation_shape.ipynb b/docs/tutorials/conversation_shape.ipynb index 2c7d2767..d55cac43 100644 --- a/docs/tutorials/conversation_shape.ipynb +++ b/docs/tutorials/conversation_shape.ipynb @@ -34,7 +34,7 @@ "id": "1c884951", "metadata": {}, "source": [ - "# The shape of a conversation: one path per turn, coloured by its speaker\n", + "# The shape of a conversation: one path per turn, colored by its speaker\n", "\n", "A conversation as geometry, in one `hyp.plot` call on raw dialogue. Each\n", "**turn** (a contiguous run of speech by one speaker) is cut into sliding\n", @@ -42,18 +42,18 @@ "of strings**: the nesting is the grouping, so every turn becomes its own\n", "disjoint trajectory through one shared 3-D space. The call embeds every\n", "window with a sentence-transformer (`vectorizer='all-MiniLM-L6-v2'`),\n", - "reduces them together with UMAP, colours each path by **speaker** through a\n", + "reduces them together with UMAP, colors each path by **speaker** through a\n", "categorical `hue=` with a native legend, and `order='serial'` reveals\n", "the turns one at a time with `chemtrails=True` leaving the spoken path\n", "behind each head. `title=` carries one string per turn -- just the words\n", "being spoken, wrapped onto two lines when a turn is long so nothing runs off\n", "the figure -- and the library's own reveal schedule advances it; the title\n", - "never names the speaker, because the *colour* does: `title_color=` takes\n", - "one colour per turn and the library retints the title with the current\n", - "speaker's colour every frame, while `title_kwargs={'size': ...}` sets its\n", + "never names the speaker, because the *color* does: `title_color=` takes\n", + "one color per turn and the library retints the title with the current\n", + "speaker's color every frame, while `title_kwargs={'size': ...}` sets its\n", "size (and the library now reserves the animated 3-D title's own vertical\n", "margin, sized to the tallest wrapped title, so the figure never has to grow\n", - "by hand); the legend maps colours to names.\n", + "by hand); the legend maps colors to names.\n", "\n", "The one effect written out by hand is a **recency fade** across turns: the\n", "current turn is opaque, earlier turns recede slowly (a turn keeps most of\n", @@ -78,14 +78,14 @@ "stripped, so the geometry reflects what the characters *say*, not how the\n", "narrator introduces them -- otherwise every one of Alice's turns would be\n", "pulled together by the repeated words \"said Alice\" rather than by their\n", - "content. Who is speaking is carried by the colour (paths and title alike)\n", + "content. Who is speaking is carried by the color (paths and title alike)\n", "and the legend.\n", "\n", "**Embeddings.** Sentence embeddings come from the `[text]` extra, which\n", "hypertools installs on demand the first time an embedding model is\n", "requested; nothing here checks for it. The test-suite drives the same\n", "pipeline (embed -> reduce -> disjoint per-turn paths -> serial reveal\n", - "coloured by speaker) through `fixture_data`, which embeds with\n", + "colored by speaker) through `fixture_data`, which embeds with\n", "`vectorizer='TfidfVectorizer'` so no test downloads a model.\n" ] }, @@ -96,7 +96,7 @@ "source": [ "## 1. Imports, the speakers, and the turns\n", "\n", - "The Mad Tea-Party turns, spoken text only, with each speaker's colour, the recency-fade constants, the title wrap width and the tail length.\n" + "The Mad Tea-Party turns, spoken text only, with each speaker's color, the recency-fade constants, the title wrap width and the tail length.\n" ] }, { @@ -173,7 +173,7 @@ "# at ~0.32, so the recent past of the conversation lingers on screen.\n", "FLOOR, DECAY = 0.18, 0.7\n", "# Title size and wrap width. At 14 pt a character is ~8.7 px wide at 100 dpi,\n", - "# so a 64-character line is ~560 px over the 800 px-wide axes -- centred with\n", + "# so a 64-character line is ~560 px over the 800 px-wide axes -- centered with\n", "# clear margin either side -- and the longest turn (117 characters, 119 with\n", "# the quotes the title adds) wraps to exactly two lines; no turn needs a\n", "# third (verified by rendering turns 15-17 and 22, the long ones).\n", @@ -256,7 +256,7 @@ "source": [ "## 3. The recency fade, on the `on_frame` hook\n", "\n", - "`turn_alpha` is the fade's formula and `recency_fade` assigns it to every head and trail on the public `on_frame` hook. It is the hand-written form of `dataset_fade={'floor': FLOOR, 'decay': DECAY}`, which gives exactly these alphas in one keyword. The title needs no hook: `title_color=` tints each turn's title with its speaker's colour, and the library reserves the wrapped title's margin.\n" + "`turn_alpha` is the fade's formula and `recency_fade` assigns it to every head and trail on the public `on_frame` hook. It is the hand-written form of `dataset_fade={'floor': FLOOR, 'decay': DECAY}`, which gives exactly these alphas in one keyword. The title needs no hook: `title_color=` tints each turn's title with its speaker's color, and the library reserves the wrapped title's margin.\n" ] }, { @@ -341,7 +341,7 @@ "source": [ "## 4. One call\n", "\n", - "Raw dialogue in, one disjoint trajectory per turn, coloured by speaker, revealed one turn at a time over thirty seconds and two camera rotations.\n" + "Raw dialogue in, one disjoint trajectory per turn, colored by speaker, revealed one turn at a time over thirty seconds and two camera rotations.\n" ] }, { @@ -363,14 +363,14 @@ " HyperAnimation wrapper: `.on_frame()` lives on it, not on the\n", " FuncAnimation that `fig, ani = ...` would give.\"\"\"\n", " # category order is FIRST APPEARANCE, not alphabetical, so the palette\n", - " # must be listed in that order for each speaker to get their colour\n", + " # must be listed in that order for each speaker to get their color\n", " order = list(dict.fromkeys(data.speakers))\n", - " # the title is JUST the spoken line (who says it is the title's colour),\n", + " # the title is JUST the spoken line (who says it is the title's color),\n", " # wrapped so the longest turn fits the figure on two lines\n", " titles = [textwrap.fill(f'\\u201c{text}\\u201d', TITLE_WIDTH)\n", " for text in data.texts]\n", " # THE hypertools call: raw dialogue in, one disjoint trajectory per\n", - " # turn, coloured by speaker, revealed ONE TURN AT A TIME. backend= is\n", + " # turn, colored by speaker, revealed ONE TURN AT A TIME. backend= is\n", " # pinned because the hook sets matplotlib alphas, and on Colab the\n", " # default backend would be plotly.\n", " anim = hyp.plot(\n", @@ -481,7 +481,7 @@ "id": "6c8e0a07", "metadata": {}, "source": [ - "\n", + "\n", "\n", "[Download the clip](conversation_shape.mp4)\n" ] diff --git a/docs/tutorials/conversation_trajectories.ipynb b/docs/tutorials/conversation_trajectories.ipynb index dd9a23c2..12ec8398 100644 --- a/docs/tutorials/conversation_trajectories.ipynb +++ b/docs/tutorials/conversation_trajectories.ipynb @@ -77,7 +77,7 @@ "\n", "(The [conversation-shape tutorial](conversation_shape.ipynb) is the\n", "companion piece: it draws one path per turn of a scripted conversation,\n", - "coloured by speaker, with `order='serial'`; this one follows a real Reddit thread\n", + "colored by speaker, with `order='serial'`; this one follows a real Reddit thread\n", "utterance by utterance with `animate='serial'`.)" ] }, diff --git a/docs/tutorials/hierarchy.ipynb b/docs/tutorials/hierarchy.ipynb index b779a5a9..6b957170 100644 --- a/docs/tutorials/hierarchy.ipynb +++ b/docs/tutorials/hierarchy.ipynb @@ -138,7 +138,7 @@ "source": [ "## One call: the leaves plus their mean\n", "\n", - "Passing the bare frame draws one trajectory per `(Group, Subject)` leaf and then one **mean** per grouping level above the leaves -- here a single mean over the three subjects, built in display space after the reduction. The hierarchy sets the style: `linewidth = 1 + (n_levels - 1 - level_idx)` and `alpha = min(1, 1 / (level_idx + 1) + 0.2)`, so leaves are thin and translucent and the top-level mean is heavier and opaque. Colour is assigned per **top-level** value, so every trace under `listeners` shares one colour and is told apart by weight and opacity, and only the top-level mean carries a legend label." + "Passing the bare frame draws one trajectory per `(Group, Subject)` leaf and then one **mean** per grouping level above the leaves -- here a single mean over the three subjects, built in display space after the reduction. The hierarchy sets the style: `linewidth = 1 + (n_levels - 1 - level_idx)` and `alpha = min(1, 1 / (level_idx + 1) + 0.2)`, so leaves are thin and translucent and the top-level mean is heavier and opaque. Color is assigned per **top-level** value, so every trace under `listeners` shares one color and is told apart by weight and opacity, and only the top-level mean carries a legend label." ] }, { @@ -176,7 +176,7 @@ "source": [ "## The style belongs to the hierarchy\n", "\n", - "Because the hierarchy owns `alpha`, `linewidth` and `color`, passing them is not an error but is ignored with a `UserWarning` (caught and printed below so it is visible). `legend=` is the one styling kwarg that is honoured: a list renames the top-level groups, one entry per unique top-level value, and `legend=False` suppresses the legend." + "Because the hierarchy owns `alpha`, `linewidth` and `color`, passing them is not an error but is ignored with a `UserWarning` (caught and printed below so it is visible). `legend=` is the one styling kwarg that is honored: a list renames the top-level groups, one entry per unique top-level value, and `legend=False` suppresses the legend." ] }, { @@ -225,7 +225,7 @@ "source": [ "## A continuous `hue=` carried through the hierarchy\n", "\n", - "A continuous `hue=` is carried *through* a column hierarchy rather than superseded by it. Give it one value per **input row** (here the timepoint) and every trace is coloured by it; a mean trace takes the element-wise mean of its members' hue, computed by the same operation that averages their data. One colour scale spans every trace, so `colorbar=` reads against all of them. The per-trace values come back as `trace_metadata['aux']`." + "A continuous `hue=` is carried *through* a column hierarchy rather than superseded by it. Give it one value per **input row** (here the timepoint) and every trace is colored by it; a mean trace takes the element-wise mean of its members' hue, computed by the same operation that averages their data. One color scale spans every trace, so `colorbar=` reads against all of them. The per-trace values come back as `trace_metadata['aux']`." ] }, { @@ -370,7 +370,7 @@ "source": [ "## What `trace_data` and `trace_metadata` hold\n", "\n", - "`xform_data` is the analysed pipeline output, one entry per **input** dataset -- for a hierarchy, one per leaf. `trace_data` is the final pre-centre/pre-scale plotted trajectories: the leaves followed by the per-level means, which are presentation artifacts and so are deliberately absent from `xform_data`. `trace_metadata` describes every entry of `trace_data` positionally (`keys`, `level_idx`, `is_mean`, and `aux` when a continuous hue was carried), plus the whole-hierarchy `axis` and `level_names`; it is `None` for non-hierarchical input.\n", + "`xform_data` is the analyzed pipeline output, one entry per **input** dataset -- for a hierarchy, one per leaf. `trace_data` is the final pre-center/pre-scale plotted trajectories: the leaves followed by the per-level means, which are presentation artifacts and so are deliberately absent from `xform_data`. `trace_metadata` describes every entry of `trace_data` positionally (`keys`, `level_idx`, `is_mean`, and `aux` when a continuous hue was carried), plus the whole-hierarchy `axis` and `level_names`; it is `None` for non-hierarchical input.\n", "\n", "The bundle's `pipeline` was fit on the frame's **groups**, each as wide as one group, and remembers the grouping: `.transform(frame)` groups the frame first and returns one array per group, matching features by name." ] @@ -420,7 +420,7 @@ "source": [ "## What is refused, and why\n", "\n", - "Some combinations are ambiguous and are refused rather than guessed at. A frame with a hierarchy on **both** axes has no defined precedence. Groups that name **different** innermost features -- one ticker per sector, say -- cannot be matched by name; the fix is to make the innermost level shared measurements and move the identifiers up a level. `names=` assigns one name per input *dataset*, but a hierarchy draws groups plus means, so it points at `legend=[...]` instead. And `cluster=` would fight the hierarchy's colour assignment on either axis." + "Some combinations are ambiguous and are refused rather than guessed at. A frame with a hierarchy on **both** axes has no defined precedence. Groups that name **different** innermost features -- one ticker per sector, say -- cannot be matched by name; the fix is to make the innermost level shared measurements and move the identifiers up a level. `names=` assigns one name per input *dataset*, but a hierarchy draws groups plus means, so it points at `legend=[...]` instead. And `cluster=` would fight the hierarchy's color assignment on either axis." ] }, { diff --git a/docs/tutorials/io.ipynb b/docs/tutorials/io.ipynb index b7cd5170..ca8f81c2 100644 --- a/docs/tutorials/io.ipynb +++ b/docs/tutorials/io.ipynb @@ -53,10 +53,10 @@ "id": "d2c9ada8785c", "metadata": { "execution": { - "iopub.execute_input": "2026-10-08T17:12:42.610368Z", - "iopub.status.busy": "2026-10-08T17:12:42.610026Z", - "iopub.status.idle": "2026-10-08T17:12:45.943434Z", - "shell.execute_reply": "2026-10-08T17:12:45.942793Z" + "iopub.execute_input": "2026-10-10T01:28:42.246079Z", + "iopub.status.busy": "2026-10-10T01:28:42.245934Z", + "iopub.status.idle": "2026-10-10T01:28:45.883234Z", + "shell.execute_reply": "2026-10-10T01:28:45.882752Z" } }, "outputs": [], @@ -90,10 +90,10 @@ "id": "7d0c9908b6e2", "metadata": { "execution": { - "iopub.execute_input": "2026-10-08T17:12:45.944717Z", - "iopub.status.busy": "2026-10-08T17:12:45.944578Z", - "iopub.status.idle": "2026-10-08T17:12:46.104565Z", - "shell.execute_reply": "2026-10-08T17:12:46.104171Z" + "iopub.execute_input": "2026-10-10T01:28:45.884595Z", + "iopub.status.busy": "2026-10-10T01:28:45.884460Z", + "iopub.status.idle": "2026-10-10T01:28:46.041335Z", + "shell.execute_reply": "2026-10-10T01:28:46.040952Z" } }, "outputs": [ @@ -140,10 +140,10 @@ "id": "837d96bf244e", "metadata": { "execution": { - "iopub.execute_input": "2026-10-08T17:12:46.121233Z", - "iopub.status.busy": "2026-10-08T17:12:46.121130Z", - "iopub.status.idle": "2026-10-08T17:12:46.320180Z", - "shell.execute_reply": "2026-10-08T17:12:46.319776Z" + "iopub.execute_input": "2026-10-10T01:28:46.057331Z", + "iopub.status.busy": "2026-10-10T01:28:46.057242Z", + "iopub.status.idle": "2026-10-10T01:28:46.253903Z", + "shell.execute_reply": "2026-10-10T01:28:46.253418Z" } }, "outputs": [ @@ -179,7 +179,7 @@ }, { "data": { - "image/png": "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GTJELrzwQtm2bZt861vfMseHDh0qkydPlvr6+oLP29zcLO3t7dKnT5+s43379pXGxkbeVQAViWAHoCTvvfeeCVga6hyDBg2S2travI854IAD0n/fa6+9zO3++++fday1tbXTiRNuampqpKqqytfPAAC2INgBCObDpLq6Q8DKxxl/5/X+brQyp8+plbvc8X76PQCoRAQ7ACXRcW1aIcuc7KDhqqmpKfSZtsOHD5cVK1akj3344YemgnjooYeG+twAEFcEOwAl6d27t3zlK1+R//7v/zbj4tasWWMmU4S1xEmmSZMmmckazz//vJlIcdVVV5lZtRr4AKAS+et9AICLWbNmyXXXXSdnn322abNedtll0tLSEvprNXHiRPnggw/k+9//vnz88cdm8sUdd9zBewSgYlWl8o1ABgAAQKJQsQMQa+PHj3ddvuTmm2823wMA7EbFDkCs6ULHO3bs6HC8rq7OLGQMANiNYAcAAGAJZsUCAABYgmAHAABgCYIdAACAJQh2AAAAliDYAQAAWIJgBwAAYAmCHQAAgCUIdgAAAJYg2AEAAFiCYAcAACB2+H9UPqfeUcC35gAAAABJRU5ErkJggg==", + "image/png": "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", "text/plain": [ "
" ] @@ -205,7 +205,7 @@ "\n", "clusters = hyp.load('blobs', n_samples=150, centers=4, random_state=1)\n", "fig = hyp.plot(clusters.drop(columns='target'), '.', hue=clusters['target'], legend=True,\n", - " title='blobs, coloured by target')\n", + " title='blobs, colored by target')\n", "\n", "lorenz = hyp.load('lorenz', n_samples=2000, random_state=0)\n", "fig = hyp.plot(lorenz, title='Lorenz attractor')\n", @@ -229,10 +229,10 @@ "id": "96cbabdcda8c", "metadata": { "execution": { - "iopub.execute_input": "2026-10-08T17:12:46.321220Z", - "iopub.status.busy": "2026-10-08T17:12:46.321156Z", - "iopub.status.idle": "2026-10-08T17:12:46.370108Z", - "shell.execute_reply": "2026-10-08T17:12:46.369811Z" + "iopub.execute_input": "2026-10-10T01:28:46.254811Z", + "iopub.status.busy": "2026-10-10T01:28:46.254744Z", + "iopub.status.idle": "2026-10-10T01:28:46.305243Z", + "shell.execute_reply": "2026-10-10T01:28:46.304789Z" } }, "outputs": [ @@ -331,7 +331,7 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAHWCAYAAACR5EiaAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAY1xJREFUeJztnQeUFGXatp9BBBUREAEDCkoSQTGAEoyAKIoBwYwBBcyrK7pG1B90za5pXT+zskbEiIKgIioKRhQjCGImjSQFQWH+c7/wzvb0dM90z3Sorrquc/rMdE9NdXV1d9Vd95OKSkpKSgwAAAAgpNTI9wYAAAAAZBPEDgAAAIQaxA4AAACEGsQOAAAAhBrEDgAAAIQaxA4AAACEGsQOAAAAhBrEDgAAAIQaxA4AAACEGsQOlOOf//ynHXHEESntmQcffNB69Ohhv//+e+D25DPPPGNt2rSx7777zgqNCy64wLp3717hMnpteo1hJ8ifMQAoDBA7UI4mTZpY8+bNU9ozDRs2dMuuv/767EnICnzGAKC61Kz2GiB0nHrqqSkve+ihh7obQLbgMwYA1QVnByoNoShUsscee9jKlSvt4osvtl133dWOPPJI97d//etfLpziWbVqld10000u7LDjjjvaXnvtZaeffrp9/fXXae3pX375xf7xj39Yt27dbKeddrJevXrZc889V/r3H3/80YYOHeq2S38//PDDy/w9GStWrLAbbrjB9ttvP2vfvr17nbfeeqvb7th16zWNGjWqzP/+9ddf7vE77rij9LETTjjBrrvuOps+fboL/Wmdjz76aOnftY4+ffq4bezZs6c99NBD5bbp9ddft8MOO8z977777mv33ntvyk6ZXs8VV1zh9oP293HHHWcff/yx+9vcuXNthx12sHvuuafc/1199dW2yy672PLlyxOu9+mnn3bbtPPOO7t1H3PMMTZ+/PjSv2s/vPTSS3bjjTe690jPfdRRR9kHH3xQbl2p7IOZM2faWWed5Z6rQ4cObvnJkycn/IyJpUuXutet59br0Pvw6aefllnmtddes6OPPtp9Xjt27OjenyeffDKl/QoA4QJnB1Ji8eLFduaZZ9pWW21ld999t9WtWzfhchICo0ePtksvvdS23HJLmz9/vr377ru26aabpryni4uLnZjaZJNN7JJLLnFhtVmzZpWe8LROnXwbNGhgV155pfv51ltvOSGm/03mTK1Zs8ZOO+00+/LLL+28886zli1bupOsxM5XX33lXldVeP/9923ixIk2cOBAa926tTVt2tQ9LtFyyy232ODBg61r167uZCwhKNGo7RBTpkxxJ3mdtCXe/vjjD3vggQfc6022j2PRth944IF28803u//Vc5588slOoLZo0cL23ntve/bZZ23IkCGl/7N69Wp7+eWX3f9ttNFG5dapfXn55Ze77ZFQkLCYNm1auWVHjBjhxOy1117rxOJ//vMftw/03K1atUp5H+i1Sihtv/32bp316tVz79G2226b8DXruU488UT3mbzooovcZ0sCU4+98MILts0229g333xj55xzjp100kl24YUXOlH3xRdf2IYbbpjWewsAIaEEII6hQ4eW7LfffqX3R48eXdK6deuSSy65pNy+uuWWW9zfPEOGDCk58cQTq7VPb7rpppJ27dqVzJ07N+Hfr7vuupL27duXLFiwoMzjI0aMKNlpp51Kli1bVma758yZ4+5PnDjR3Z8wYUKZ/3vllVfc45MnT3b3f/jhB3f/qaeeKrPcn3/+6R6//fbbSx8bMGCAe+y9994rs+xvv/3mtuWKK64ot4277bZbyapVq9z9U089taRr164lK1euLF1m6dKlJR06dCjzHiRCz6vnj2Xx4sUlO++8c8mwYcPc/ddff90t9/HHH5cuM2nSJPfY1KlTE673vvvuc+tYsWJFhc/dp0+fMo8VFxeX7LjjjiWXXXZZWvvg73//e0nnzp2TPl/8Z2zUqFHu/rRp00of0/7r0qVLyVVXXeXujx071i3z008/JX0NABAdCGNByvTr1y+lZeR0yEmQQyA3JV30/wqfyNGp6O+bbbZZmccPOOAA5258+OGHCf/vvffes/XWW8+FsGJRyK1mzZqlYZN0adasmXXq1KnMY3JCtC1yT2LRcsuWLbPZs2e7+wp/yR2pVatW6TJydBTySQWFfWKRK6KwzieffOLuy9nZYostylRtvfjii7b11luX22aPQoa1a9d27pr+T6GyROy2225l7sth0WM+nJTqPtD7ou3cYIMNUnrNcgr1mhTu8mj/aZ/5192lSxf3GgcMGGAjR460JUuWpLRuAAgniB1ImXhxkexEqRNk/fr1XdhLORrK/0iHRYsWVRj20olSoatEVTv+/5P9n0JjEjyx6L7W9+uv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ODuQSTixBhOcHUDsQKTFDs4OZBLETvCgmRz4z0HNmjXZGRBNsYOzA5mCPjsAwQVnByzqYoerccgUfJaCB9VY4D8HODsQWbGjDz/VWJApEDvBhJwdECQoQ6RzdjhBQabgsxQ8cHbAfw5wdiCyYkcffk5QkCn4LAEEE3J2INJihwRlyBQkKAcTnB3wrL/++uwMyAmBEzs4OwDhh5wdEISxILJih2osyCSEsYIJYgcEYgciK3ZwdiCTIHaCB2Es8CB2ckvPnj3tr7/+iuQHMJBiByBTIHaCCc5OtPEnXI73ueO7776zH374waJKIMUOJyjIBCQoAwSTVatWhS5B+a9fi235l5+7n9lm1KhRdsABB9iOO+5o3bt3t//85z/u8a+++soGDBhgHTp0cI8//vjj7vHPP//c+vfv735v166dtWnTxn788Ud3f+rUqdavXz+3rn333dfuueeeMufgu+++2z2uv+s59dxCy9x4443Wq1cv93wHH3ywvfXWWxZUAmejkLMDmQThHDwIY8Eff/wRKrGzdNLrNv+he/Xh1lWWNT55sG2yT/esPJfcmREjRjiB06JFC5szZ44Tj0uXLrVTTjnFjj/+eLvuuuts5syZNnToUGvatKl17tzZrr32WjvrrLNs8uTJrp9d/fr17ZdffrEhQ4bYmWeeabfeeqt9//33dskll7jGvqeffrpNmTLFHnnkEfdcjRs3thkzZljdunVLLya17uuvv94233xzu//+++3CCy+0d999N5DObeDETlg+/BAMEDvBRAdbiC7e2QlDGEtOTqnQESUlNv/h+2yjHTtYzU0bZvz5Vq5c6cRIkyZNnMjQTTzxxBPudwkaISFy0EEH2QsvvGB77bVXqUiRyPH7/bHHHnNOz2mnnebub7311nbuuefazTff7ESQnkvCRevV822xxRZltuXYY48t/f3oo4+2kSNH2sKFC61Ro0YWNAL3SQvDhx+qdsBYNW+u1WqyeUYPEIidYBLEKz/IHTqJhuXiVsetUqHjWbPGPZ4NsdOyZUs777zznLhQeOnUU0+1HXbYwbkuunXs2LHMft5ll12Srmv27NlO7MTSvn17Ky4udjeJpD59+jjRpJ8DBw605s2bl65bIa9XX33V5s+fX/qe+p9BI3DKIgwffgiGBUzOTjAhjAVhcnZ0gabjVhnBU6PG2sezxKBBg+zwww93zsyJJ55oJ598svtederUyYW4Yqldu3aFieLxF4T+vs7FcmAV1lIekMJZffv2tcsuu8zl/yhf54033nB/33bbbW3BggVuW4JK4Lxk/+FnGGg0SGYBZyrJD2cnmODsRBt/9V+rVi0rdOTe6AJNAsdRo4Y1PmlQVlydWDbbbDP729/+Zv/+979dvowcn2+//daFmxTC8jcfUqqxbvtiz62tWrWyzz77rMx6p0+fbg0bNnThLo/CWxI5w4YNs4ceesg9pnweiaAePXrYdtttF/iS9ppBFTvacWH4IhRa2CfX25BtCxixAxA8wpagLCdaOTq5OCZL0Lz33nu222672UYbbWRvvvmmEzWqhlIisUSJ8m3k6Hz99ddOtHTs2LE0t0c5PN26dXOPKxT26KOP2l133WWHHHKIS1C+/fbbXWhMTJs2zT2mSiydmyVw9FxC+TtKdlbvnrlz5zrRFWQCJ3a8wJHNidjJf+Z/VbchVSGUTQsY9yCYEMaCP//8M1RiR+g4l4sLT50XJVhuuOEG59JIiNx0001OvCjUpKqro446yn3PFF669NJLS92ZM844wy2rCqqnnnrK/f3BBx901VsqMa9Xr577X+XmuNdUs6Y9/PDDLrdHldISTVdeeaX720UXXeRuvXv3duu5+uqrXQVXUCkqCdil7znnnGN33nmni//JpoOySETMGXp2OXHQ/KY7sv5F8wKmRu3a9uOIYUm3YdHLL1jxU4+tfTwFMeaE08P3OUfHW8CZEG+6stGB4IMPPqj2uiCzB+udd97ZXZ1CNFGux3777edOvCqPBohsGMvbnJDfzH9PGQGTiHXbsGzKO2WXS6EMM5cWMOQfnB3wzk4YEpShMAhcgrK3NYNavpZvSsM+sSQJ+2Sqo+eil1+sWOisY/nn0614VILl1qyxZe9PqXA7JHA2atsu40InYMYlrIMQY7QJU4IyFAaBFTu+NBGqlvmv0JDCXT9fP8L91P2qIIFS/NSjKS27+KXny7tO6yh+fGS1tqMqUHoeHH4t/su+/Hy5+ykQO9EGsQO5JnAeolf6ODvJqSzsk2pHz1SSiFfMnJH6m7cuWTmZ4Ml2Z9HET4mzk28mvb7UHrp3fszHoySh2JEQmjd3lTXZvJZt2jBwhybIIL5MOUwJyhBsAndE8TFcxE5iYgWKwj5VzespU02lFuJ9+tpG7dpXL2emRg1r2P9YK3768bXJxomETw7yi2JB7OQXCRgvdNa+H2s/GqtXVyyITh7c2PbpvkmF60UYFS7++F5RwzuAUIsdnJ3ql5xXVs5dzvlRCGrMs+4Wu95Kc3381bnWE1NFVbdz1wqrtrLZWbTs5hUhdvKMBEkic21dfmpSQfTwffNtxw4bJXR40hVGEDxIUIZcE1ix478MkP6wOZ/XE1/O7ZdL6Px4tN6H7rU/vp1lS9947X+Px4unoiJreOSxVrdzt3KhsNjn0TLFTz+RcDtyAc5OflFIqrzBV2K1a9eoUBDp46LH48VOusIIgonPycTZgVwRuKMDzo5VOTQVG+KqKK+nUmelpKSs0Fn3WJMzz7VVP3xni8asTUQuHvW4VI/V3na7Ch2ohkce55ahrDx6SIDIeZEgWad3neNWq9Z6FQoiLafH40lHGEHwc3YQO5ArAnd0iGLpeWWJwvr76qVLKwxNJQtxJUtIrrtvD1sWL2gqQf/rhY5DgsdXaq17TgmseAdKOTyJmh5me+RFlMNYxX/9anNXzbPNazWxhjU3TfpYLnJgFGKS8+LX//CTZROUEwmikwY1Trgd6QgjCL6zQ4IyRFbsxI6LiAKV5eHEJxKXHuljQkIJQ1wP3VsmxJXIbUmXRaOfTP7HdWG1Jqedk1JSchBGXgSFikRIVXh96SS7d/5DVmIlVmRFNrjxye7x+Me6b7JPznJgJFxixUt8NVa8IEomuNIRRhBcCGNBrgncEcLbmlHI2aksDydRIrGVmAsnbdiydal4cOXh8QKjpMR+feFZa3zyoITPI7elfp/DbfGY5zL3gvw03UpmXaWTf1Rdsu3sVNcRSSRMvAipCrPmLbT7PploJQ03Nqu3zK33vvkP2Rp9cNax9rGHrcNGO1rRkk1ykgMTu59EotLzeEGUjFhhpNyflSvXuPUjeAqHMM7GCiv33HOP/fTTT/b//t//q/a62rRp42Zxde3a1SzqYidKOTuV5eEkTiQusZWzZ1nd3btUuv6lb7xqmx7aN+nzuCaAmaRGDduwVesKk6NzPfIim2Knuo6IHB0vdOJFSFUcnrXbs8hqlQywkqI19tdhL9vqjtPKCB3PGlvj3KQaczfIeg5M+T471W8qqG2b/snynFZlUe6eebGzwQYbZHCtkA0GDx5sq+N7RRQggXV2ohDGqqxEPOHfVSb+yktWv1fvUmEggZGMCpsCZlIIxIiaypoeZnPSea5ydjJRFSSx4YVOvAjxf081tPW/7VkrIopKaljN5w+y1a1mWY16v5UTPDWshlt3UZZzYBLtJ70n6/JTM7rebFZlUe6eWUhQLhyKiopCMcOMcREBHv2gn/UOOLj8P5aUrHVHYtbT8KjEOTjz/nObu5Wbp5VJioqs6eXDy+TcVDTrKtWRF5kgW2KnoqqgVHFiw4rKiZBZK7+1s+cMtRE/X+9+KtRVle2R4FmvuKENanyyDWk80K3bP8egxic5ESVhcOSxDUs/HpnOgUnaZ2dVSd73f3WFlR99AenjL2bDNBtLTu3ny790P7PJIYccYnfffXeZxx599FE3RV7HO+3bESNG2B577GG77rqrXXDBBbZUBS4xoaTvv//eBg0aZO3bt7dXX33Vfv/9d7vooovc/+yyyy7Wr18/mzZtmlv+X//6l51wwgml/7948WK75JJLSpc96aSTSo+zU6dOdf+744472r777utCYBUdgytbPtG2VpXAOjte+YedylyQBr1625JxY8r+UwIXpMFBh7oycDeIM9GHq7KTflENq3/I4bb4hWeS/L3iMRArZn5tNes3SFmw5GLSeXVDJRUlDqdTFZRsPfpdOToKXcnRkQg5tmF/e6x4VNqhrUTbU1SjxIZ3ONtabLKZu99sRTub8eNCa910s9LH5FiMery4NBTU/9iGGQ0FJe6zY1Z7g/Uyvt5sVWVR7p69MFZYSs8znXtXmdh56aWX7PTTTy99bOzYsdanTx93zLv66qtt5syZ9vDDD7ucqKuuusrdbrnlltLlzz77bCdSrrnmGttkk03s3nvvtZ9//tmeeOIJW2+99eyjjz6yLbbYIuHzn3POObZmzRqXe1OnTh33f3reX375xYYMGWJnnnmm3XrrrU6kSBRp2dht9aS6fPy2hk7sRCGM5dGJPtnJ3rkgA4dUmAPjaXDQIa578W8ff2gLRz6Q+gasW6fEx+IXn40/Y9pmA062hf99sMJVaNBn8RP/TauqqqLXnW9np7KDV6pVQZWtR79LyHgxVFFoqyKxk3h7mliLJpvEhGEWW0lJTSsqWmwnD67lQj4P3TuvNPSlXTXq8YXWuWvdKjs78Xktifvs6Iq+RpXW6xOStf5cVWVR7p55/MVsGJydTOfeVcbBBx/shMucOXOsefPmtmDBAvvwww/tiiuusN9++82eeeYZd2vdem16w3nnnefEgvJg/fl17733do6K548//nChqi233NIts8022yR87hkzZth7771n48ePt2bNmrnH/M/HHnvM2rVrZ6eddpq7v/XWW9u5555rN998sxM1NbyTv45Ul4/f1qqC2CkA0nFBlk//JC2h0+CwflYvph9PwuTixk1Sy+/Jw6DPbIidZAevbWptbSvXrCx1aCorl071IKjfY+9LFMUKHp9fUxnJtidZGOb4M+uUCp3S/bWmyGb+VGx7NKz8+VLNa4nfroeeSM91i12vx6//pjuaJ3y9mewZRLl75glTgnJVL1CqylZbbeXCU3JzzjjjDHvllVesVatWTtxMnz7d7dvjjvtfWoOckj///NOKi4udmBEdO3Yss06Ji/PPP9969uzp/le3evXqlXvu2bNn28Ybb1wqcOL/JvESi0JPel7dGjVqVKXl47c1NGLHlyJGydnJlAtSWtKdMkVWp8Mupfk/yZKL3Yys8jESq3/o4bb4+WfyOugzGwnKyQ5ew34cUc6hqahcOtl6ZqyYaZust0nC8Jju71W3q725bHLpY3vW7ZLyQTPR9iQLw3w6famVWI0yeUOq4irZVDkHTTKaMFxZn51U11u6nevWL7HTtt1GWU8kTrUPEETP2fG5d1W5QKkqClk9+eSTTuyMGzfOhbaEP97997//daIklsaNG5f+Hr/f69evbw888IALX+nn/vvv78Jgbdu2LbOc1p/su6v3NP546+8najGQ6vKZ+owELkHZK/2o5OxkkgpnXiWgTsfd3aDOn68fYXOGnu0a/SVKLk6YUHzyIKu/T4/yic85HPSZLRIlDot4h6ayRMRE69H92+b9xyUfnzXn/HLJx1rnW8veKfPY28verVbSow/DxPPJpPXKCh0rsdW9JlqrzZtkPWE4FbEjofPelGVJP9Kx69eyU99dltVEYgkcCatcCB1t85efLw9tEnSYBoH63LtEBQDZonfv3jZr1iwXvvr444+d+BEKa0koKLTVtGnTMreaKexrOUZ33nmnde/e3UaNGlXu79tuu60tW7bM5dfEI3fps88+K/OYnKaGDRs6MVXd5UMndqLUVDDTlJZ0V0ZRkWso+PuH75Vr7Jds0rkcH4182PKiYe6nH0WRq6qqXDo78QevRMIntkQ8nfXEOz0Kc8UKmcrK0atyotTJ+eDDKz94aPsO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F1o6/fTTSx979NFH7b777rPXX3/djjvuOOvataudc845NnXqVBsxYoTddNNNduGFF9q3335rkydPtnr16tkjjzxi99xzj/3222+233772R577OEm0T/++ONunccee2yZ9Vx11VV27rnn2i233GLz58+3tm3b2tVXX20tWrRwy19wwQVO8Fx33XXu/s8//2z//Oc/7Z133nHvdffu3e2GG26w5cuXu2XefvttKy4utpYtW7p177jjjpZNAvktjWo1FmS2/DzVPjvJREwmQk5BobLcJC8eN92obGWQfj/y1Do26oHfrGRNURlHpLulL/6yJXZSPdFkovIp2Tyrqm5TFAmb2En1M5EpsfPSSy+VETtjx461Pn36JPxe/fTTT05MXHbZZdasWTMndKZMmWI33nijEyu77rqrTZo0ya699lrbYYcdkj7vd99950TVv/71L9twww1d2ErrHTlyZLllV61aZQMHDrQ2bdrYU0+tHYi8ZMnavEf973bbbWdHH3202xYJIOX7PPPMM5ZNAvkNJGcHMlV+niqFKmJSPcFWlJtUkXhUYvjI5g9ZydC1icjHtulp+zRrWeX9lkzsVEcY5PJEU9k8q3xsUyESpj47qX4mMoVcHbkrc+bMsebNm9uCBQvsww8/tCuuuCLh8nJSzjzzTOvcuXPpY3JvDjroIDvssMPc/QEDBtjEiRPdshUJ1KFDh1q7du3c/RNPPNEuvvjihMvKPZo3b56NHj3aNt544/Ld008+ufT+EUcc4dyjbBNIsSPFT84OxJPuiTWbU8+DSEUn2MShwCI7p8npLsm60o7N6xKRldvT9a92VRaG/nsde1VfHWGQyRNNKoIrlXlWuT75FSI6cQY5mTXIM85U8SQ3Rm7OGWecYa+88oq1atXKWrdunfR/OnYs26JCQqlv375lHtM6PvnkkwqfWyEnT926dZOKo9mzZ9s222xTTuiIxYsXu+Rnhbck1OQC6ZZtAukj6kBIGAsg9XEWyU6wvo9M4p4+J1uXunskFS6VzQGrCvHOTmXbXZ0TTTpIcA09e45dP+Jn91P3KyppjyW+qitT2xRmdBESljBWKp+JTKOQ1bhxa5uX6qdCWxVRq1bZbUl0EZhKQvIGG2yQ0vZp/cmcO7lBH3zwgV1yySX25JNPulBYLgjkpw2xA5kgbM6OQkpnzxlqI36+3v3U/XROsAoF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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAHWCAYAAACR5EiaAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAYoJJREFUeJztnQmcVfP//9+TFJJKKksUlaTIUkjWSkSWRJQsoax9+Ylvlnz5l33/2r+WLNmTnVJIiLKWrKVkb9VGFDX/x+tTn3Hnzr0z987c5dxzns/H4z5m7p0z5567nHNe5/XeioqLi4sNAAAAIKRUy/cGAAAAAGQTxA4AAACEGsQOAAAAhBrEDgAAAIQaxA4AAACEGsQOAAAAhBrEDgAAAIQaxA4AAACEGsQOAAAAhBrEDqTEVVddZUceeWRKyz7wwAPWuXNn+/333wP37j7zzDPWsmVL++677ywI/P333257brvttgq3OQr06NHDfdcAADIJYgdSolGjRta0adOUlq1fv75bdt111+XdhbTQ92bTTTflXQOAjFI9s6uDsHLKKaekvOxhhx3mbgDpcvPNN/OmAUDGwdmBlDj//POtU6dOpUIru+++u61YscIuvPBC22WXXezoo48uOWHFhl1WrlxpN9xwgwtt7bDDDrb33nvb6aefbl9//XVa7/4vv/xi//73v61jx4624447WteuXe25554r+fuPP/5ogwYNctulvx9xxBGl/p6MP/74w6677jrbf//9rU2bNu513nLLLW67Y9et16Rtvv/++22vvfZyr2Xp0qXu7/r5n//8x23bzjvvbMcff7x9+umnpZ5H67v22mvd/2r7jjnmGJs2bZpVq1bxblhUVOTWd+yxx7r/1Wu89NJL7bfffnN//9///metWrWyuXPnlvq/v/76yy170UUXJVzvsmXL7LLLLrN9993XvZ799tvPzj33XJszZ07J56zP9ttvv7WTTz7ZdtppJ9ttt93c+vxr96TyHohRo0a5kGjbtm3dtp100knueyT22Wcf932K5cMPP3Tr0jr33HNPu/zyy0uFSDP1/QKA8IKzA5Vm8eLFduaZZ9oWW2xhd999t9WuXTvhcspH0Qnu4osvts0339zmzZtn7733nm288cYpP9fChQudmNpoo43ciVZhtZkzZ5aIKq1TQqBevXru5K2fb7/9tjtx6n+TOVOrV6+20047zb788kt3km/evLnNmDHDiZ2vvvrKva5YJIp0cr3yyiutVq1abnt0/4QTTnDvx+DBg93revTRR91jL7zwgm211Vbuf7Vdzz//vJ199tm26667uucZOHBgymJH26fXcd5557kTuUTl7NmzbcSIEU483HrrrW79AwYMKPk/vQfaLuXCJELb9Nlnn9kll1zitluCcvLkyaU+GwmL/v37W9++fd17pee+6aab7Pvvv3evU6T6Htxxxx12++23O4FzwQUX2J9//umEZM2aNRNu30cffeSWlRDV9+jXX391n8EPP/zgRGemvl8AEHKKAVJg0KBBxfvvv3/J/VGjRhVvu+22xRdddFGZZW+66Sb3N8+AAQOKTzjhhCq9zzfccENx69ati+fMmZPw79dcc01xmzZtiufPn1/q8WHDhhXvuOOOxcuWLSu13bNnz3b3x48f7+6PGzeu1P+9+uqr7vGJEye6+z/88IO7f9BBBxWvWLGi1LIjR450f5syZUrJY1qmQ4cOxZdffrm7P3fu3OLtttuu+Morryz1v0899ZT731tvvTXpa/fb/Mwzz5R6/Mknn3SPf/zxx+7+wIED3fbFcu655xZ37ty5ePXq1QnXfcghhxRfeOGFFT738OHDSz3+yCOPuMc//PDDlN+DpUuXFu+www7FQ4cOTfp8e++9d/HgwYNL7vfp08dt499//13y2NixY91zTZ06NWPfLwAIN4SxoEr07NkzpWU++OAD5zjIaZCbki76f4VQ5OiU9/dNNtmk1OMHHnigcw/kECTi/ffft3XWWcc5B7EoJFK9enWbOHFiqceVi1SjRo1Sj8lF2GyzzVxYxqNlFG6aOnWquy/3RK9b641FIZ9UUcgnFoWehH+OXr162axZs2zKlCnuvkJcb7zxhgvnyRlKhNwyhfoUpkz2Hgk5UbF06dLF/VQYLtX3QD8VrjrggANSer1yiz7++GO3vD4jT7t27Uq97kx8vwAg3CB2oErEi4tEKLdGuR9169Z1YS+dKJ9++um0nmfRokXlhiWUe6LQVaLKMP//yf5PoajYk6nQfa1PYZOKXq9CNwr/KKQWexs/frz7m3+e2O2J375U0HbG4l+vz9uRcNpyyy3dey1ee+01Jy6ShbDEiSee6MJgyltSXkz37t2dQIpnww03LHXffxb+daXyHvjPINXXrP+TcLnzzjtLrXOPPfZwf1+yZEnGvl8AEG7I2YGcsN1227lcC+VVDB8+3IYMGeJK0w8//PCUT/TJBIs/8Ss3J54FCxa4n3Xq1En4fzpp66SpRN7YUnn1v9Hz6QRaEVq3REaiXjl+nV4s+BO/Jz7Jtzz0v7Giwwsxnysl90ZOzX333efe35dfftklEyunqjzklOim5Gbl/UgwSAC1b9++1HNts802Jff9e+2fO5X3wIu1eAGZDP+ZSZAlEmyxwrOq3y8ACDc4O5BTJB6UYNuiRYuElTrJUCWOwhZevMSjCif9Pb4aafTo0S6cohBXIuSGyD0YN25cqcd1X4InPnSUCC2j6iWd+FURFXtTwrNQlZfEyIQJE8pUGqXKu+++W+r+m2++6X7GvjaFdOTSjBkzxoWWUm0EKRQi9InXPjyV7LnlGsU+dyrvgUJaCg2+/vrrKW2Pkpb1uX/zzTdl1qlbgwYNMvb9AoBwg7MDWefqq692oQuFIHQiVR6GKqlUlSRUCaW8EpWVJ6ua6tevn6s0UvmznAdd1asLsk5uyoNR1Y9CGarc0Xrl2Ch/4/HHH7ezzjorYYhLyPlQ2ENl3HIrtI3Tp093lU46gasUuiK07U888YTbRuWNyAGR4NBJunHjxm79EhKHHnqo6y4tQSCRoHJuVRSl0nxRgk2ui/KP5GKokuvGG2+0Dh06lMqT0fviS+f1P8pZKg9VTrVu3dqaNWvmtkNhp+XLl5fkxXj0+tZbbz233frs9Nx677zYSeU90Gegz+mhhx6y9ddf35WR6/VI8KllQCKUS6TP9JxzznEujdweOW7KL9LzaJ0Vfb8AABA7kHW23nprFxaRONEJVV1yhw4dWnIiVol3bNJrIpT8+uSTT7qSZ5VL64Ssx1S+7EMk/u9yJxQe0vOqJ4tK0stDwkAl5g8++KBzhiQYlOz7r3/9K6WycDkQen0K4dx1111uHRIGEhGxJ1xtl07Oeh7l2Wy//fauP4xeT0VIVOjErxO7/kdiQfk1EojxqH/Pq6++6lweLVceCj1p25Vvo9chR0SvQy5MLHrOe+65x5WOa7mDDjrIhYzSfQ+0vf6zVLhJy8Q/VywSXY899pgrV1cbAb1v+nwk8nyieEXfLwCAIpVk8TZAPtHJXr1b5AxA1Zk0aZLLc1Gfm3iHJl3klqmvkcJ6vlcOAEChQc4O5B2FHY477rh8b0ZokMshh6aqQicWrokAoJAhjAV558UXX8z3JhQ86ig8f/58l/yr5GGVawMAwBoQOwAhYOzYsS6pWonQV1xxRZnmhQAAUYacHQAAAAg15OwAAABAqEHsAAAAQKhB7AAAAECoQewAAABAqEHsAAAAQKhB7AAAAECoQewAAABAqEHsAAAAQKhB7AAAAECoQewAAABAqEHsAAAAQKhB7AAAAECoQewAAABAqEHsAAAAQKhB7AAAAECoQewAAABAqEHsAAAAQKhB7AAAAECoQewAAABAqEHsAAAAQKhB7AAAAECoQewAAABAqEHsAAAAQKhB7AAAAECoQewAAABAqEHsAAAAQKhB7AAAAECoQewAAABAqEHsAAAAQKhB7AAAAECoQewAAABAqEHsAAAAQKhB7AAAAECoQewAAABAqEHsAAAAQKhB7AAAAECoQewAAABAqEHsAAAAQKhB7AAAAECoQewAAABAqEHsAAAAQKhB7AAAAECoQewAAABAqEHsAAAAQKhB7AAAAECoQewAAABAqEHsAAAAQKhB7AAAAECoQewAAABAqEHsAAAAQKhB7AAAAECoQewAAABAqEHsAAAAQKhB7AAAAECoQewAAABAqEHsAAAAQKhB7AAAAECoQewAAABAqEHsAAAAQKhB7AAAAECoQewAAABAqEHsAAAAQKhB7AAAAECoQewAAABAqEHsAAAAQKhB7AAAAECoQewAAABAqEHsAAAAQKhB7AAAAECoQewAAABAqEHsAAAAQKhB7AAAAECoQewAAABAqEHsAAAAQKhB7AAAAECoQewAAABAqEHsAAAAQKhB7AAAAECoQewAAABAqEHsAAAAQKhB7AAAAECoQewAAABAqEHsAAAAQKhB7AAAAECoQewAAABAqKme7w0AyAYrV660r776ymrVqmVbbrml1ahRgzcaACCiIHYgFMJm7Nix9vLLL9ukSZNs1qxZtnTpUqtevbr9/fffbpmioiJbZ511rGbNmrbeeuvZhhtuaBtttJHVrVvX6tevbw0aNLBNN93UtthiCyeOmjRpYltvvbVtsMEG+X55AABQRYqKi4uLq7oSgFwh8TJu3Dh76aWXnLCZOXOmLVmypOTvEjibbbaZ1a5d27744gvr2bOnEyzz58+3X3/91S27bNkyW758uf3555/2119/2apVq8p9TokkOUMSSXKKtG6JpI033rhEJG2++ebWuHFjJ5K22WYb93cAAAgGiB0ItLAZP368vfDCC/bee+/ZN998U0bYSGi0adPGOnXqZEcddZRzY8Ttt99uAwcOtFdeecW6detW4XMtXrzYZs+ebd9995398MMP9vPPP9ucOXNKRJL+LpH0+++/2x9//OFEkneNklGtWjUnkuQmSXBJJNWpU8eJpE022cQaNWpUIpK22mort+0NGzZ0/wcAAJmDMBYEgtWrV9ubb75pzz//vBM2M2bMcAIjVthIHOyxxx623377OcemRYsWSdfnBUOqxqWcmJ122snd0kEOkQSShFKsSJo3b54tXLjQFi1a5EJqEkk//fSTffvtt04klbdd2na9Xi+SFHKTSKpXr54TSRJEcq8UcvMiSb/rfwAAoCwcHSEvwuatt95yjs3EiRNLhI0XAAob6YTevn1723fffZ1j07Jly7SeQzk6/rmyicRIq1at3C0dJHgkjiR+9PPHH390Imnu3LklIkku1m+//eaEk5aRm1SeSNJrluCRm6TtUshNeUkSScpL0nsam5fUtGlTF3ZTeA4AIMwgdiCrSGy8++67zrF55513bPr06e5EHi9sFIbyjk26wiERQQ8FSZTIkfFht3TeT4kiiaTvv//eiaRffvnFiaQFCxaU5CVJJOl91t8kkioSfV4k+byk+ORtuWoSSQq5SSTppmUAAAoBxA5kDJ1QJ0+ebM8995wTNl9//bU7+XphIwEiYSNRI8dGwkb5Ntkk285OrtF7qDwf3Tp27JjW/+qz8HlJEknJ8pIklCScVOWWSvL2uuuu60RSfF6SF0kKufnkbYk7heKCLkYBIFwgdqDSIuKjjz6yZ555xgkb9bRR+CVW2OikJlGz995725FHHpl2PkxV8GEsig3/QQJEt1122SWt91LiRwLJJ28r98iLJH3mEknKS9JycpVUISeRVFFekkRSRXlJPnlbTpJ+RyQBQGVA7EBKfPzxxzZq1CgnbL788kt35e9PZhIWOkFJ1Oy1117OsUn3hJpp/EkxbM5OPpAQad26tbulg5whiSO5SQq5SSQprBafvC2RJPGkZVLNS5JIWn/99Uv6JSXKS/IiSY4STSUBog1iB8owZcoU59goidgLGy8adLLRSUUhFImbHj162K677hq4K+5cJShDciQwmjVr5m7poM9MITYfcvMiKTYvSSJJITeJJi1bUV6S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dqKNP+FyvM8d3333nf3www8WVQIpdjhBQSYgQRkgmKxcuTJ0Ccp//7rQln/5ufuZbUaOHGkHHnig7bDDDtapUye766673ONfffWV9e3b19q2besef/zxx93jn3/+uR111FHu99atW1vLli3txx9/dPcnT55sPXv2dOvab7/97J577il1Dr777rvd4/q7nlPPLbTM9ddfb127dnXPd8ghh9jbb79tQSVwNgo5O5BJEM7BgzAW/Pnnn6ESO0snvGHzHrxXX25dZVnDk/rbRvt2yspzyZ0ZNmyYEzjNmjWz2bNnO/G4dOlSO/nkk+24446za665xmbMmGGDBg2yxo0b2x577GFXX321nXXWWTZx4kTXz65u3br2yy+/2IABA+zMM8+0W265xb7//nu76KKLXGPf008/3SZNmmQPP/ywe66GDRva9OnTrXbt2iUXk1r3tddea5tuuqndf//9dsEFF9h7770XSOc2cGInLF9+CAaInWCigy1EF+/shCGMJSenROiI4mKb99B9tsEOba36xvUz/nwrVqxwYqRRo0ZOZOgmnnjiCfe7BI2QEDn44IPthRdesL333rtEpEjk+Pf9sccec07Paaed5u5vueWWds4559iNN97oRJCeS8JF69XzbbbZZqW2pXfv3iW/H3PMMTZixAhbsGCBNWjQwIJG4L5pYfjyQ+UOGCvnzrEajTbN6AECsRNMgnjlB7lDJ9GwXNzquFUidDyrV7vHsyF2mjdvbueee64TFwovnXLKKbb99ts710W3du3alXqfd95556TrmjVrlhM7sbRp08YWLlzobhJJ3bt3d6JJP/v162dNmzYtWbdCXq+99prNmzev5DP1P4NG4JRFGL78EAwLmJydYEIYC8Lk7OgCTcetUoKnWrU1j2eJU0891Y444gjnzJxwwgl20kknuf2qffv2LsQVS82aNctNFI+/IPT3dS6WA6uwlvKAFM7q0aOHXXLJJS7/R/k6b775pvv71ltvbfPnz3fbElQC5yX7Lz/DQKNBMgs4U0l+ODvBBGcn2vir/xo1alihI/dGF2gSOI5q1azhiadmxdWJZZNNNrF//etfdscdd7h8GTk+3377rQs3KYTlbz6kVG3t9sWeW1u0aGGfffZZqfVOmzbN6tev78JdHoW3JHIuvfRSe/DBB91jyueRCOrcubNts802gS9prx5UsaM3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7UlnEGgmknMTJf/qvv89k0NCq0rYk5ETgbMDuYYwVsCIH8IJa5BA8KGiqgzFTIRcD42DSIQP33z02ycJxcL8vxaUui8nKNEsrUQzrtIdIJho+d1rtauwH1G54bU6y5x7U2yJk2skeFTZVW1JHev+a38rWrJGHOjkvMfxi0r6+uin1qP1SdRV9Bll+6o+kfOk+9kaEgrpoYtZ32YEIBcE8nIiijk7UD4VJctWNoxVnusRK1KWrFqS7BmShN0edOMeYknk2qTrWsUvv+jvxTbp9w/KLNdy/RblOkKlXl+7qbZPww729j0JBHaR2QHLettbD1S3scVm44pmO0ekzT5/25vb3mnF529Yqsw91QTybIudVHr+RKXyKYiQoJw9+vfv78ZxHHLIITldz2WXXWZbbLGFDRgwwIJIIPdyxA6kU+5d3veoIrFTUVKxFyk719rJRi16IcGoh39ERbwgGb14rAuDaf3luTbpDhCMXV4/4/sR6X7sSA0vwJKJOj3WsNnKhOKg++F17eWnF5dxRAZs+9eadcWVuaeaQL7OOhUPJq0KiQaTiihWPgURxE720BTxddddN+frufTSS7O+X4dS7CiBDaAyibzpkDgPZg16xIsUiQdVOcW7S+WFnPpucqwLa6Wba1SZfkTK0VHoSo5OotlhycrSPY//9YD1PeVKe3r47yXiQCXfW29T0156rnRHY/f3Xze2og3KukUagZFKwnYuklPjk381gd2LnyhVPgURHd8JY2WHTAidyqzHj3oKKoHcOu0EhLHAk24ibzrOTrJqr0ShpcokSqfr2lQWCZyKBqR+v/KHpOEsvfYmey62G3ZuUaoySDktiXrBtNiivvVf95/3Tes9pO6BCQeXlnqetRcxuarEiU3+zWTlk96XqFVQZZIw5uzk6jtx6KGHutDS6aefXvLYo48+avfdd5+98cYb1qdPH9tzzz1t4MCBNnnyZBs2bJjdcMMNdsEFF9i3335rEydOtDp16tjDDz9s99xzj/3222+2//772+677+4m0T/++ONunb179y61nssvv9zOOeccu+mmm2zevHnWqlUru+KKK6xZs2Zu+fPPP98Jnmuuucbd//nnn+2qq66yd999133WnTp1suuuu86WL1/ulnnnnXds4cKF1rx5c7fuHXbYwbJJIPfSqFZjQWbLz1Pts5NMxGQi5BQUKspN8uJx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7JpDddFFF1nDhg2z+vwAUYMwVv6Rc3PFFVfYnXfeaQsXLnShqo4dO7qE4/bt2+d78wCiJXayFcZS/5urrrrKXn/99RKBs9lmm7lOxhdffLFtuummGX9OAFgDCcr5Q52N//Wvf9mYMWNcF/datWq5+XtytMk9hLATaLHjrwIz0QBLAid26q5EjRr9afru5ptvnpHnAYDywdnJPaNGjXLN/r766quSClId90455ZQ8bA1Afgits6Mhm1deeaWrplq2bJl7TKWTffv2dSEqJRwDQG5B7OQGVY5eeumldu+999qSJUtcWkCnTp1clVWbNm1ytBUAwSFUpedKstPgubFjx7qZLUJ5N6qi0pWMSsYBIH8QxsouX375pZ1zzjmuolQ5j2puqiorXfgxqgaiTME7O5999pnbkRWHXrx4sXusQYMGzqKVwGEYHUBwwNnJDg8//LANHTrUZs6c6e5r4PDll19uvXv3ztIzAhQWBZmzo6sXVROobHLRokXuMQ2i0zRxxaabNWuW460FgFRA7GQO5R+qTFxCR7/rmKkZVQpVtWjRgi8kQCGInerVq5cSO19//bVzcF5++WX79ddf3WNq7qdZVHJwWrZsmcetBYBUQOxUHeUjauL4O++849zvevXquTxEOTmaWwUABZizI7dGQzfVD0Jox9aoBjk4rVq1yvdmAkAakLNT+fftf//7n+sL9sMPP7jHlGisC8DDDjuM7yBAoYoddS/WALqHHnrICR/1wunatasdeOCBtvfeezNtF6AAwdlJD7nY559/vj3xxBNudM26665rPXr0sFtuuYWKUoA0KCrOVDObLKC4s8omFY/2M6o86vqp6gKFsiSMtOyOO+5oHTp0cIPrsHMBgsepp55q999/v9ufNX8Jknd318Tx999/3wlEFV2oIaBGOyjEDwDpEei9ZsaMGaVsXN1/99137ZNPPnFJyt99953Nnz/fdUXW47HoCqhOnTqueWDTpk2d5SsRtNdee9ElGSBPEMYq/73RyAYN3/zll1/cY7vssosbSty5c+ecfUYAYSTQzk46qK/Oe++957olq9/OrFmz3CRfVWupwVa8K6RW6argUnNBlWm2bdvWuUI77bQTV04AWUI5eApNa8gvDsUa5syZY+edd54988wztmLFCqtZs6b17NnTiR7G1wBkhtCInYqumOQEyRqeMmWKq+zyrpBC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", "text/plain": [ "
" ] @@ -344,7 +344,7 @@ "iris = hyp.load('iris')\n", "species = ['setosa', 'versicolor', 'virginica']\n", "fig = hyp.plot(iris.drop(columns='target'), '.', hue=[species[t] for t in iris['target']],\n", - " legend=True, title='iris, coloured by species')\n", + " legend=True, title='iris, colored by species')\n", "iris.head()" ] }, @@ -364,10 +364,10 @@ "id": "a379f9ec8e18", "metadata": { "execution": { - "iopub.execute_input": "2026-10-08T17:12:46.371229Z", - "iopub.status.busy": "2026-10-08T17:12:46.371166Z", - "iopub.status.idle": "2026-10-08T17:12:46.544259Z", - "shell.execute_reply": "2026-10-08T17:12:46.543867Z" + "iopub.execute_input": "2026-10-10T01:28:46.306176Z", + "iopub.status.busy": "2026-10-10T01:28:46.306114Z", + "iopub.status.idle": "2026-10-10T01:28:46.466801Z", + "shell.execute_reply": "2026-10-10T01:28:46.466403Z" } }, "outputs": [ @@ -504,10 +504,10 @@ "id": "24b857322c1d", "metadata": { "execution": { - "iopub.execute_input": "2026-10-08T17:12:46.545220Z", - "iopub.status.busy": "2026-10-08T17:12:46.545164Z", - "iopub.status.idle": "2026-10-08T17:12:46.550764Z", - "shell.execute_reply": "2026-10-08T17:12:46.550333Z" + "iopub.execute_input": "2026-10-10T01:28:46.467762Z", + "iopub.status.busy": "2026-10-10T01:28:46.467698Z", + "iopub.status.idle": "2026-10-10T01:28:46.473410Z", + "shell.execute_reply": "2026-10-10T01:28:46.473004Z" } }, "outputs": [ @@ -637,10 +637,10 @@ "id": "e1c10894cebf", "metadata": { "execution": { - "iopub.execute_input": "2026-10-08T17:12:46.551608Z", - "iopub.status.busy": "2026-10-08T17:12:46.551553Z", - "iopub.status.idle": "2026-10-08T17:12:48.612713Z", - "shell.execute_reply": "2026-10-08T17:12:48.612187Z" + "iopub.execute_input": "2026-10-10T01:28:46.474225Z", + "iopub.status.busy": "2026-10-10T01:28:46.474169Z", + "iopub.status.idle": "2026-10-10T01:28:48.498222Z", + "shell.execute_reply": "2026-10-10T01:28:48.497824Z" } }, "outputs": [ @@ -693,10 +693,10 @@ "id": "e52a61cb3d1c", "metadata": { "execution": { - "iopub.execute_input": "2026-10-08T17:12:48.613796Z", - "iopub.status.busy": "2026-10-08T17:12:48.613724Z", - "iopub.status.idle": "2026-10-08T17:12:50.826217Z", - "shell.execute_reply": "2026-10-08T17:12:50.825765Z" + "iopub.execute_input": "2026-10-10T01:28:48.499453Z", + "iopub.status.busy": "2026-10-10T01:28:48.499373Z", + "iopub.status.idle": "2026-10-10T01:28:50.962683Z", + "shell.execute_reply": "2026-10-10T01:28:50.962297Z" } }, "outputs": [ @@ -746,10 +746,10 @@ "id": "1ec8bf5d4369", "metadata": { "execution": { - "iopub.execute_input": "2026-10-08T17:12:50.827465Z", - "iopub.status.busy": "2026-10-08T17:12:50.827374Z", - "iopub.status.idle": "2026-10-08T17:12:50.852922Z", - "shell.execute_reply": "2026-10-08T17:12:50.852584Z" + "iopub.execute_input": "2026-10-10T01:28:50.964030Z", + "iopub.status.busy": "2026-10-10T01:28:50.963936Z", + "iopub.status.idle": "2026-10-10T01:28:50.989261Z", + "shell.execute_reply": "2026-10-10T01:28:50.988829Z" } }, "outputs": [ @@ -801,10 +801,10 @@ "id": "1076475a7b73", "metadata": { "execution": { - "iopub.execute_input": "2026-10-08T17:12:50.853912Z", - "iopub.status.busy": "2026-10-08T17:12:50.853852Z", - "iopub.status.idle": "2026-10-08T17:12:51.776222Z", - "shell.execute_reply": "2026-10-08T17:12:51.775726Z" + "iopub.execute_input": "2026-10-10T01:28:50.990247Z", + "iopub.status.busy": "2026-10-10T01:28:50.990173Z", + "iopub.status.idle": "2026-10-10T01:28:51.926792Z", + "shell.execute_reply": "2026-10-10T01:28:51.926341Z" } }, "outputs": [ @@ -884,10 +884,10 @@ "id": "d88b7f9a3def", "metadata": { "execution": { - "iopub.execute_input": "2026-10-08T17:12:51.777242Z", - "iopub.status.busy": "2026-10-08T17:12:51.777173Z", - "iopub.status.idle": "2026-10-08T17:12:51.780152Z", - "shell.execute_reply": "2026-10-08T17:12:51.779547Z" + "iopub.execute_input": "2026-10-10T01:28:51.927922Z", + "iopub.status.busy": "2026-10-10T01:28:51.927849Z", + "iopub.status.idle": "2026-10-10T01:28:51.930764Z", + "shell.execute_reply": "2026-10-10T01:28:51.930376Z" } }, "outputs": [ @@ -929,10 +929,10 @@ "id": "8b1ad5aa4afa", "metadata": { "execution": { - "iopub.execute_input": "2026-10-08T17:12:51.781194Z", - "iopub.status.busy": "2026-10-08T17:12:51.781132Z", - "iopub.status.idle": "2026-10-08T17:12:51.783803Z", - "shell.execute_reply": "2026-10-08T17:12:51.783513Z" + "iopub.execute_input": "2026-10-10T01:28:51.931617Z", + "iopub.status.busy": "2026-10-10T01:28:51.931558Z", + "iopub.status.idle": "2026-10-10T01:28:51.934054Z", + "shell.execute_reply": "2026-10-10T01:28:51.933731Z" } }, "outputs": [], diff --git a/docs/tutorials/manip.ipynb b/docs/tutorials/manip.ipynb index 6ef70c43..02ef23f0 100644 --- a/docs/tutorials/manip.ipynb +++ b/docs/tutorials/manip.ipynb @@ -217,7 +217,7 @@ "source": [ "### `Normalize(mode='isotropic')`\n", "\n", - "The default `mode='minmax'` rescales every column on its own, so each feature gets its own offset and scale and the data's shape is distorted on purpose. `mode='isotropic'` centres the whole table on its centroid (the per-column mean) and divides every column by the **same** scalar, the largest absolute deviation from the centroid over all entries, before mapping the result onto `[min, max]`. All pairwise distances are scaled by one constant, so angles and distance ratios are preserved; the centroid lands at the midpoint of the range and at least one coordinate touches an end of it. On a list, one shared centroid and one scalar are fit across all the datasets, so every dataset is moved and rescaled identically. Below, the same subject is normalized isotropically into `[-1, 1]`, and the ratio of two between-row distances shows the shape is unchanged." + "The default `mode='minmax'` rescales every column on its own, so each feature gets its own offset and scale and the data's shape is distorted on purpose. `mode='isotropic'` centers the whole table on its centroid (the per-column mean) and divides every column by the **same** scalar, the largest absolute deviation from the centroid over all entries, before mapping the result onto `[min, max]`. All pairwise distances are scaled by one constant, so angles and distance ratios are preserved; the centroid lands at the midpoint of the range and at least one coordinate touches an end of it. On a list, one shared centroid and one scalar are fit across all the datasets, so every dataset is moved and rescaled identically. Below, the same subject is normalized isotropically into `[-1, 1]`, and the ratio of two between-row distances shows the shape is unchanged." ] }, { diff --git a/docs/tutorials/market_sectors.ipynb b/docs/tutorials/market_sectors.ipynb index ceb0e9b1..679988b0 100644 --- a/docs/tutorials/market_sectors.ipynb +++ b/docs/tutorials/market_sectors.ipynb @@ -52,13 +52,13 @@ "3. `hyp.plot` draws all six, plus a seventh, heavier path: the **market**,\n", " the point-by-point mean of the six aligned sector paths.\n", "\n", - "**Colour is the market's composition.** Every path is coloured through the\n", + "**Color is the market's composition.** Every path is colored through the\n", "library's *mixture* hue: `hue=` carries one row of weights per month and\n", - "`palette=` the six sector colours, and each point is drawn in the\n", + "`palette=` the six sector colors, and each point is drawn in the\n", "weighted blend (`hue_mode='mixture'`). A sector's weights are a one-hot\n", - "row, so it keeps its own colour; the market path's weights are each\n", - "sector's **share of the basket's market capitalisation** that month\n", - "(reported share counts x price), so its colour shifts toward whichever\n", + "row, so it keeps its own color; the market path's weights are each\n", + "sector's **share of the basket's market capitalization** that month\n", + "(reported share counts x price), so its color shifts toward whichever\n", "sectors dominate -- away from technology red as the dot-com bubble deflates\n", "(about a third of the basket in mid-2000, a fifth by 2004), toward\n", "financial gold before 2008 (the largest sector in 2006), then back to\n", @@ -84,7 +84,7 @@ "counts, which the SEC's XBRL API (the per-concept endpoint, falling back to\n", "company facts; quarterly, from 2009) reports as they stood on the day, are\n", "multiplied by every later split before they meet the price. Earlier months\n", - "back-fill the first reported capitalisation along the adjusted price.\n", + "back-fill the first reported capitalization along the adjusted price.\n", "XOM's counts are read from Exxon Mobil Corp's filings (CIK 34088), not the\n", "holding company the SEC's ticker map now names. HON's 2026-06-30 count in\n", "the SEC data (316,940,010, from a 10-Q/A) is half its 2026-03-31 count\n", @@ -102,7 +102,7 @@ "source": [ "## 1. Imports, a disk cache, and the universe\n", "\n", - "Six sectors of four or five tickers each -- unequal on purpose -- with fixed sector colours, the animation length, a whitened PCA so a sector's common growth does not flatten its path onto one line, and the colormap that tints the date red or green.\n" + "Six sectors of four or five tickers each -- unequal on purpose -- with fixed sector colors, the animation length, a whitened PCA so a sector's common growth does not flatten its path onto one line, and the colormap that tints the date red or green.\n" ] }, { @@ -257,7 +257,7 @@ " or ``None``. The counts are filed as they stood on the day; each is\n", " multiplied by the ratio of every LATER split in `splits` (ticker ->\n", " [(date, ratio)]), which puts it in the units of Yahoo's split-adjusted\n", - " close -- the pair multiply to the true capitalisation, even in the\n", + " close -- the pair multiply to the true capitalization, even in the\n", " months between a split and the next filing.\"\"\"\n", " if os.environ.get('HYPERTOOLS_OFFLINE'):\n", " raise RuntimeError('HYPERTOOLS_OFFLINE is set: refusing to fetch')\n", @@ -324,7 +324,7 @@ "source": [ "## 3. Growth curves per sector, market-cap weights, the basket's return\n", "\n", - "What is plotted is each stock's cumulative log return since the first month (a growth curve), one matrix per sector. Each sector's share of the basket's capitalisation, month by month, becomes the colour weights of the market path, and the cap-weighted trailing twelve-month return tints the title. `load_market` is the real path; `fixture_data` is the same payload from the seeded basket.\n" + "What is plotted is each stock's cumulative log return since the first month (a growth curve), one matrix per sector. Each sector's share of the basket's capitalization, month by month, becomes the color weights of the market path, and the cap-weighted trailing twelve-month return tints the title. `load_market` is the real path; `fixture_data` is the same payload from the seeded basket.\n" ] }, { @@ -398,7 +398,7 @@ "source": [ "## 4. Reduce per sector, hyperalign, draw seven paths\n", "\n", - "Three library calls: `hyp.reduce` per sector (its own stocks, its own space), `hyp.align(..., model='HyperAlign')` into one shared space, and `hyp.plot` on the six aligned paths plus their mean, coloured through the mixture hue. The `on_frame` hook only sets the title: the date under the head, tinted by the basket's return.\n" + "Three library calls: `hyp.reduce` per sector (its own stocks, its own space), `hyp.align(..., model='HyperAlign')` into one shared space, and `hyp.plot` on the six aligned paths plus their mean, colored through the mixture hue. The `on_frame` hook only sets the title: the date under the head, tinted by the basket's return.\n" ] }, { @@ -427,8 +427,8 @@ " aligned = hyp.align(reduced, model='HyperAlign')\n", " market = np.mean(aligned, axis=0)\n", " # mixture hue: one row of weights per month, blended through the six\n", - " # sector colours. One-hot rows keep a sector its own colour; the market\n", - " # path's rows are the sectors' shares of the basket's capitalisation.\n", + " # sector colors. One-hot rows keep a sector its own color; the market\n", + " # path's rows are the sectors' shares of the basket's capitalization.\n", " hue = [np.tile(np.eye(len(names))[i], (n_months, 1))\n", " for i in range(len(names))] + [data.weights.to_numpy()]\n", " # THE call: seven paths, one minute, three turns of the camera; a\n", diff --git a/docs/tutorials/morph_shapes_zoo.ipynb b/docs/tutorials/morph_shapes_zoo.ipynb index 693645fd..dc0000ed 100644 --- a/docs/tutorials/morph_shapes_zoo.ipynb +++ b/docs/tutorials/morph_shapes_zoo.ipynb @@ -109,7 +109,7 @@ "# is essentially all-unique (bunny 35947/35947, vase 36022/36022, cube\n", "# 30034/30246, sphere 29891/30135). Its segment therefore draws with a few\n", "# hundred distinct dots rather than a couple of thousand and reads sparser than\n", - "# its neighbours. That is the shipped dataset, not a fault in this example.\n", + "# its neighbors. That is the shipped dataset, not a fault in this example.\n", "SHAPES = ['bunny', 'cube', 'sphere', 'teapot', 'vase']\n", "# The isotropic Normalize in assemble() is NOT redundant with hyp.plot: plot\n", "# rescales every dataset with ONE shared affine, so clouds left in their own\n", @@ -150,7 +150,7 @@ "source": [ "## 2. The shapes zoo, sampled and loop-closed, with parametric stand-ins\n", "\n", - "`hyp.load` fetches each shape once into `~/hypertools_data`; the clouds are normalised into the unit cube, sampled, and the first is repeated at the end so a looping player never hard-cuts. On a cold cache with no network, five parametric clouds stand in.\n" + "`hyp.load` fetches each shape once into `~/hypertools_data`; the clouds are normalized into the unit cube, sampled, and the first is repeated at the end so a looping player never hard-cuts. On a cold cache with no network, five parametric clouds stand in.\n" ] }, { @@ -181,7 +181,7 @@ " rng = np.random.default_rng(seed)\n", " sampled = []\n", " for name, points in clouds.items():\n", - " # one shared centre and scale per cloud (mode='isotropic'): the shape\n", + " # one shared center and scale per cloud (mode='isotropic'): the shape\n", " # keeps its proportions and its largest extent touches the cube\n", " points = np.asarray(hyp.manip(points, model='Normalize',\n", " mode='isotropic', min=-1, max=1),\n", diff --git a/docs/tutorials/painting_embeddings.ipynb b/docs/tutorials/painting_embeddings.ipynb index 034ed762..14c8bf9c 100644 --- a/docs/tutorials/painting_embeddings.ipynb +++ b/docs/tutorials/painting_embeddings.ipynb @@ -45,25 +45,25 @@ "the input is the grouping), spins the camera, and annotates each cloud with\n", "its painting's name.\n", "\n", - "Each cloud is drawn in a colour taken from the **actual canvas**:\n", + "Each cloud is drawn in a color taken from the **actual canvas**:\n", "`hypertools.plot.colors.image_palette` clusters the downloaded image's\n", "pixels and orders the result by `pixel_fraction * chroma`, so the vivid\n", "subject wins rather than the muted background -- Starry Night comes out\n", "cobalt, not canvas-beige. The right-hand column shows, for each painting,\n", "its name with the artist and year, the complete description that was\n", - "embedded (in that painting's colour, so nothing about the geometry is\n", - "hidden), and a thumbnail of the canvas itself, vertically centred on its\n", + "embedded (in that painting's color, so nothing about the geometry is\n", + "hidden), and a thumbnail of the canvas itself, vertically centered on its\n", "description.\n", "\n", "**Data & graceful degradation.** The descriptions are bundled inline (so the\n", "text side is fully offline and deterministic). Each canvas is downloaded\n", "once from Wikimedia Commons and cached; if an image cannot be fetched, a\n", - "hand-picked representative colour is used instead, the thumbnail slot shows\n", - "a flat swatch of that colour, and the run says so. Sentence embeddings come\n", + "hand-picked representative color is used instead, the thumbnail slot shows\n", + "a flat swatch of that color, and the run says so. Sentence embeddings come\n", "from the `[text]` extra, which hypertools installs on demand the first\n", "time an embedding model is requested; nothing here checks for it. The\n", "test-suite drives the same pipeline (embed -> reduce together -> one\n", - "cloud/colour per painting -> spin) through `fixture_data`, which embeds\n", + "cloud/color per painting -> spin) through `fixture_data`, which embeds\n", "with `vectorizer='TfidfVectorizer'` so no test downloads a model.\n" ] }, @@ -74,7 +74,7 @@ "source": [ "## 1. Imports, a disk cache, and the five paintings\n", "\n", - "The descriptions are bundled inline with each painting's artist, year, Wikimedia file and a hand-picked fallback colour. The layout constants place the text column and the thumbnails.\n" + "The descriptions are bundled inline with each painting's artist, year, Wikimedia file and a hand-picked fallback color. The layout constants place the text column and the thumbnails.\n" ] }, { @@ -195,9 +195,9 @@ "id": "d4d4caf7", "metadata": {}, "source": [ - "## 2. Windows, canvases and colours\n", + "## 2. Windows, canvases and colors\n", "\n", - "Each description is cut into overlapping ten-word windows. The canvas is downloaded once (the only network access here) and `image_palette` picks its most salient legible colour; offline, the fallback colour and a flat swatch stand in. `fixture_data` is the test-suite's path: it takes every colour from a thumbnail committed next to the example script (`examples/data/`, not shipped with this notebook, so it is not called here) and embeds with TF-IDF, so no test fetches a canvas or a model.\n" + "Each description is cut into overlapping ten-word windows. The canvas is downloaded once (the only network access here) and `image_palette` picks its most salient legible color; offline, the fallback color and a flat swatch stand in. `fixture_data` is the test-suite's path: it takes every color from a thumbnail committed next to the example script (`examples/data/`, not shipped with this notebook, so it is not called here) and embeds with TF-IDF, so no test fetches a canvas or a model.\n" ] }, { @@ -220,7 +220,7 @@ " colors: list # one RGB tuple per painting\n", " images: list # per painting, the cached canvas path or None\n", " vectorizer: str # how the windows are embedded\n", - " source: str # which path produced the colours\n", + " source: str # which path produced the colors\n", "\n", "\n", "def windows(text, size=WINDOW, step=STEP):\n", @@ -255,23 +255,23 @@ " return dest\n", " except Exception as error:\n", " print(f'canvas {spec[\"file\"][:20]}... unavailable ({error!r}); '\n", - " 'using its hand-picked colour and a flat swatch')\n", + " 'using its hand-picked color and a flat swatch')\n", " return None\n", "\n", "\n", "def canvas_color(spec, path):\n", - " \"\"\"The painting's most salient colour, from the real canvas.\n", + " \"\"\"The painting's most salient color, from the real canvas.\n", "\n", - " Choosing the colour is the library's job: ``image_palette`` orders\n", + " Choosing the color is the library's job: ``image_palette`` orders\n", " clusters by ``pixel_fraction * chroma``, so a small vivid region beats a\n", " large muted one. Ordering by cluster SIZE -- which is what this example\n", " used to do -- returns the background.\n", "\n", - " One legibility floor on top of that ordering: the first colour whose\n", + " One legibility floor on top of that ordering: the first color whose\n", " luminance is at most MAX_LUMINANCE. Measured on the real canvases, The\n", " Great Wave's two most salient clusters are its cream sky and foam\n", " (luminance 0.88 and 0.94), which vanish on a white page; its Prussian\n", - " blue is third. Without a canvas, the hand-picked colour stands in.\n", + " blue is third. Without a canvas, the hand-picked color stands in.\n", " \"\"\"\n", " if path is None:\n", " return to_rgb(spec['fallback'])\n", @@ -289,7 +289,7 @@ "\n", "\n", "def fixture_data(paintings=PAINTINGS):\n", - " \"\"\"The same payload with every colour drawn from the one committed\n", + " \"\"\"The same payload with every color drawn from the one committed\n", " thumbnail, no canvas images (flat swatches stand in), and a\n", " deterministic TF-IDF embedding. No network, no model.\"\"\"\n", " names = list(paintings)\n", @@ -334,7 +334,7 @@ "source": [ "## 3. One call, plus the annotated column\n", "\n", - "Raw text in, five clouds out, spun by `animate='spin'`. Everything after the call is annotation of the same figure: the name with artist and year, the embedded description, and a thumbnail centred on it.\n" + "Raw text in, five clouds out, spun by `animate='spin'`. Everything after the call is annotation of the same figure: the name with artist and year, the embedded description, and a thumbnail centered on it.\n" ] }, { @@ -355,7 +355,7 @@ " \"\"\"`data.descriptions` / `data.colors` / `data.images` in, the animation\n", " out. Returns the HyperAnimation wrapper, never the unpacked pair.\"\"\"\n", " # labels= in its per-OBSERVATION form: one sub-list per cloud, carrying\n", - " # the painting's name on its MIDDLE window (roughly the centre of a text\n", + " # the painting's name on its MIDDLE window (roughly the center of a text\n", " # trajectory) and None everywhere else. (1.1 also takes one label per\n", " # dataset, placed by label_anchor=; this form names the window itself.)\n", " labels = [[name if i == len(cloud) // 2 else None\n", @@ -388,7 +388,7 @@ " ax.title.set_visible(True)\n", " # one block per painting: bold name, then artist and year in italics\n", " # (placed after measuring the name), then the description that was\n", - " # actually embedded, all in that cloud's colour\n", + " # actually embedded, all in that cloud's color\n", " text_x = MARGIN + (box_hi[0] - box_lo[0]) + GAP\n", " blocks, texts = [], []\n", " for i, name in enumerate(data.names):\n", @@ -410,7 +410,7 @@ " boxes = [figure_box(t) for t in texts]\n", " text_x1 = max(b.x1 for b in boxes)\n", " text_mid = (max(b.y1 for b in boxes) + min(b.y0 for b in boxes)) / 2\n", - " # slide the axes so the box sits MARGIN from the left edge, centred on the\n", + " # slide the axes so the box sits MARGIN from the left edge, centered on the\n", " # text column (a translation: the projection's scale only depends on the\n", " # axes' size), then hang the title just above its highest projected point\n", " shift = np.array([MARGIN - box_lo[0], text_mid - (box_lo[1] + box_hi[1]) / 2])\n", @@ -424,7 +424,7 @@ " ax.set_title(ax.get_title(), fontproperties=ax.title.get_fontproperties(),\n", " y=(top - y0) ** 2 / (figure_box(ax.title).y0 - y0))\n", " # thumbnails: a missing canvas becomes a flat 4:3 swatch of the painting's\n", - " # colour, so the layout is identical offline\n", + " # color, so the layout is identical offline\n", " thumbs = [np.full((3, 4, 3), color) if path is None else imread(path)\n", " for path, color in zip(data.images, data.colors)]\n", " aspects = [im.shape[0] / im.shape[1] for im in thumbs]\n", @@ -432,7 +432,7 @@ " width = min(1 - MARGIN - (text_x1 + GAP),\n", " THUMB_MAX_H * fig_h / (max(aspects) * fig_w))\n", " for (head, body), im, aspect in zip(blocks, thumbs, aspects):\n", - " # true aspect, centred on the block's vertical midpoint\n", + " # true aspect, centered on the block's vertical midpoint\n", " head_box, body_box = figure_box(head), figure_box(body)\n", " height = width * aspect * fig_w / fig_h\n", " middle = (max(head_box.y1, body_box.y1) + min(head_box.y0, body_box.y0)) / 2\n", diff --git a/docs/tutorials/pipelines.ipynb b/docs/tutorials/pipelines.ipynb index 0c206faa..f92532c2 100644 --- a/docs/tutorials/pipelines.ipynb +++ b/docs/tutorials/pipelines.ipynb @@ -55,10 +55,10 @@ "id": "d17830914e68", "metadata": { "execution": { - "iopub.execute_input": "2026-10-09T17:29:07.655330Z", - "iopub.status.busy": "2026-10-09T17:29:07.655041Z", - "iopub.status.idle": "2026-10-09T17:29:10.961376Z", - "shell.execute_reply": "2026-10-09T17:29:10.960939Z" + "iopub.execute_input": "2026-10-10T01:28:55.142827Z", + "iopub.status.busy": "2026-10-10T01:28:55.142654Z", + "iopub.status.idle": "2026-10-10T01:28:58.476719Z", + "shell.execute_reply": "2026-10-10T01:28:58.476227Z" } }, "outputs": [ @@ -101,10 +101,10 @@ "id": "e5a8090faa37", "metadata": { "execution": { - "iopub.execute_input": "2026-10-09T17:29:10.977999Z", - "iopub.status.busy": "2026-10-09T17:29:10.977842Z", - "iopub.status.idle": "2026-10-09T17:29:11.205763Z", - "shell.execute_reply": "2026-10-09T17:29:11.205214Z" + "iopub.execute_input": "2026-10-10T01:28:58.477924Z", + "iopub.status.busy": "2026-10-10T01:28:58.477790Z", + "iopub.status.idle": "2026-10-10T01:28:58.699264Z", + "shell.execute_reply": "2026-10-10T01:28:58.698730Z" } }, "outputs": [ @@ -141,10 +141,10 @@ "id": "52b7ab8f7b97", "metadata": { "execution": { - "iopub.execute_input": "2026-10-09T17:29:11.206819Z", - "iopub.status.busy": "2026-10-09T17:29:11.206754Z", - "iopub.status.idle": "2026-10-09T17:29:11.219764Z", - "shell.execute_reply": "2026-10-09T17:29:11.219365Z" + "iopub.execute_input": "2026-10-10T01:28:58.700200Z", + "iopub.status.busy": "2026-10-10T01:28:58.700133Z", + "iopub.status.idle": "2026-10-10T01:28:58.712416Z", + "shell.execute_reply": "2026-10-10T01:28:58.711981Z" } }, "outputs": [ @@ -181,10 +181,10 @@ "id": "fe551cf34c92", "metadata": { "execution": { - "iopub.execute_input": "2026-10-09T17:29:11.220594Z", - "iopub.status.busy": "2026-10-09T17:29:11.220537Z", - "iopub.status.idle": "2026-10-09T17:29:11.224815Z", - "shell.execute_reply": "2026-10-09T17:29:11.224519Z" + "iopub.execute_input": "2026-10-10T01:28:58.713455Z", + "iopub.status.busy": "2026-10-10T01:28:58.713384Z", + "iopub.status.idle": "2026-10-10T01:28:58.717867Z", + "shell.execute_reply": "2026-10-10T01:28:58.717555Z" } }, "outputs": [ @@ -218,10 +218,10 @@ "id": "2460b6f95402", "metadata": { "execution": { - "iopub.execute_input": "2026-10-09T17:29:11.225666Z", - "iopub.status.busy": "2026-10-09T17:29:11.225616Z", - "iopub.status.idle": "2026-10-09T17:29:11.384432Z", - "shell.execute_reply": "2026-10-09T17:29:11.384074Z" + "iopub.execute_input": "2026-10-10T01:28:58.718758Z", + "iopub.status.busy": "2026-10-10T01:28:58.718709Z", + "iopub.status.idle": "2026-10-10T01:28:58.875709Z", + "shell.execute_reply": "2026-10-10T01:28:58.875294Z" } }, "outputs": [ @@ -234,7 +234,7 @@ }, { "data": { - "image/png": "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", + "image/png": "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A9kC3Lx5szz/hYaGSouQ79PnPqW5oyLLgJksCiuWw99//33s27fPKqyYAH/33Xfjhhtu0CcXpdnAdqB10L4S0mIsE1zFyYmniB0eFESWSlhjw1ky/3ETzMKqXXt1yW/AliDbga+//rrkpVKk9+/fH3PnzpWRCEVpKajIaqBKFj/+1ltvibDavXu3CCua5jF8+a677sJNN92kwkppcbDdJluKrasOOJZqUnYWStLSUJKThZIs88EKmFxnJSw3B6aCApQW5Mul+Tov8ysOolvy/yzVMfqNsSXp6y+XDmX2FzwkBunzL+ESEQn/sWoN0JBh9KxSMayZz4m0nKEbO8VVYGBgg30fRbEVVGTVYyaLTyLvvvsu3nvvPezatUtevVFYMZj0X//6FyZNmqTCSlFqGL63mK+eDdRmoWH48ccf8dBDD2HHDnMMVGRkpLzNPEFtCSotGRVZdaxkUWzNnz9fxBUdiS3Cqk+fPrjjjjswefJkaxSPoihNGxVZZw6fE+m+zgo+Eyn4WDIrlVvT5557bgP+lBTFdlE1UEsLB/q59O3bF9u3bxdhxVdnvXr1wowZM3DbbbepsFIUG6MxAqKbIzRJvueee7BixQp50clA+unTp0s6hbfmYypKBVRk1QCfQPhE/Ouvv1rzAnv27ClbgYMGDZJXbFq5UhTbREVW7Vm2bBkee+wx7N27V96mE/vjjz+OKVOmGPbzURRbR0VWDXDd+IknnpCSOPMLs7KysH79ejnKbyDyFRw/l0883bp1k00als7V/0VRmi4qsmrelH700UclTzAjI0Mq+Ayjpy1Njx4nfdQURakau1LWzJU652z9888/cnAui8aisbGxSEtLkyelCg+wnR3c3d1ls6ZVq1bo2LGjtB3PO+88udQqmKKcHThLyeiqlStX6o+gEnv27BEfv99++w0lJSXyIvLWW2/Fc889J89niqLUDhVZDQzntfgEtXbtWmzZskVK68ePH0dSUpJUwfjxyjNfPj4+UgWLiopC9+7dxfaBLvDBwcENffcURSknsi699FLrKIACfPrpp3j66aetGaqdOnXCM888g+uuu04fHkU5A1RkNTLp6ekShsp2I6tgfDJjFYzvr5yPyNI8Z8JYBWvdurU84XGLkbNgHLrX1WhFOXMsra9ffvmlRT+MzFF98MEHRWDl5ORIdX348OF444030L79qQaz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", "text/plain": [ "
" ] @@ -267,10 +267,10 @@ "id": "2d8717dbce36", "metadata": { "execution": { - "iopub.execute_input": "2026-10-09T17:29:11.385483Z", - "iopub.status.busy": "2026-10-09T17:29:11.385416Z", - "iopub.status.idle": "2026-10-09T17:29:11.416405Z", - "shell.execute_reply": "2026-10-09T17:29:11.415946Z" + "iopub.execute_input": "2026-10-10T01:28:58.876754Z", + "iopub.status.busy": "2026-10-10T01:28:58.876678Z", + "iopub.status.idle": "2026-10-10T01:28:58.951691Z", + "shell.execute_reply": "2026-10-10T01:28:58.950973Z" } }, "outputs": [ @@ -305,10 +305,10 @@ "id": "13f3ce155e5d", "metadata": { "execution": { - "iopub.execute_input": "2026-10-09T17:29:11.418056Z", - "iopub.status.busy": "2026-10-09T17:29:11.417971Z", - "iopub.status.idle": "2026-10-09T17:29:14.253722Z", - "shell.execute_reply": "2026-10-09T17:29:14.253219Z" + "iopub.execute_input": "2026-10-10T01:28:58.953034Z", + "iopub.status.busy": "2026-10-10T01:28:58.952939Z", + "iopub.status.idle": "2026-10-10T01:29:01.770831Z", + "shell.execute_reply": "2026-10-10T01:29:01.770347Z" } }, "outputs": [ @@ -342,10 +342,10 @@ "id": "393ce0baf6c5", "metadata": { "execution": { - "iopub.execute_input": "2026-10-09T17:29:14.254796Z", - "iopub.status.busy": "2026-10-09T17:29:14.254734Z", - "iopub.status.idle": "2026-10-09T17:29:14.274404Z", - "shell.execute_reply": "2026-10-09T17:29:14.273995Z" + "iopub.execute_input": "2026-10-10T01:29:01.771976Z", + "iopub.status.busy": "2026-10-10T01:29:01.771901Z", + "iopub.status.idle": "2026-10-10T01:29:01.792189Z", + "shell.execute_reply": "2026-10-10T01:29:01.791803Z" } }, "outputs": [ @@ -376,7 +376,7 @@ "source": [ "## The `plot` bundle\n", "\n", - "`hyp.plot(..., return_model=True)` returns a dict instead of the figure: `fig`, `xform_data` (the analysed data), `trace_data` and `trace_metadata` (the drawn trajectories; the metadata is `None` unless the input was hierarchical), `animation` (the raw handle, `None` for a static plot), `pipeline` (a fitted `hyp.Pipeline` covering whichever stages ran), `models` (the reduce/align/cluster/impute specs, plus `cluster_labels`), `colors` (the colours drawn, with the palette and colormap behind them) and `predict` (`None` unless `predict=` was set). The pipeline's steps are the stages, in the library's canonical order." + "`hyp.plot(..., return_model=True)` returns a dict instead of the figure: `fig`, `xform_data` (the analyzed data), `trace_data` and `trace_metadata` (the drawn trajectories; the metadata is `None` unless the input was hierarchical), `animation` (the raw handle, `None` for a static plot), `pipeline` (a fitted `hyp.Pipeline` covering whichever stages ran), `models` (the reduce/align/cluster/impute specs, plus `cluster_labels`), `colors` (the colors drawn, with the palette and colormap behind them) and `predict` (`None` unless `predict=` was set). The pipeline's steps are the stages, in the library's canonical order." ] }, { @@ -385,10 +385,10 @@ "id": "b7d5465c434d", "metadata": { "execution": { - "iopub.execute_input": "2026-10-09T17:29:14.275424Z", - "iopub.status.busy": "2026-10-09T17:29:14.275364Z", - "iopub.status.idle": "2026-10-09T17:29:14.422384Z", - "shell.execute_reply": "2026-10-09T17:29:14.421860Z" + "iopub.execute_input": "2026-10-10T01:29:01.793265Z", + "iopub.status.busy": "2026-10-10T01:29:01.793204Z", + "iopub.status.idle": "2026-10-10T01:29:01.940832Z", + "shell.execute_reply": "2026-10-10T01:29:01.940443Z" } }, "outputs": [ @@ -404,7 +404,7 @@ }, { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcEAAAHWCAYAAAAPaDLLAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAA1FRJREFUeJzsnQV4G1fahY9YZmbHYWZmhjI3ZeZ2y0xb5nbbbuFvt8yQtimlYWZmBsfMbMsW63/OHY8sU+Kgnfi+eSaSZVkajaQ592ONx+PxQCKRSCSSVoi2uXdAIpFIJJLmQoqgRCKRSFotUgQlEolE0mqRIiiRSCSSVosUQYlEIpG0WqQISiQSiaTVIkVQIpFIJK0WKYISiUQiabVIEZRIJBJJq0WK4GnA+vXrMXXqVPTr1w/Dhg3DsmXLcNFFF+GVV17BqcTjjz+OMWPGtIpj5XA48Pnnn+Pcc89Fnz59MHr0aDz00EPIzs6ud99p06bh7LPPFvebNGkSvvrqq3r3KSkpwVNPPYVRo0ahb9++uOaaa7B9+/aj2rcNGzaIx9m4cSNOVSwWCyZMmNDgsZJIfJEieBpw3333weVy4eOPP8abb74pTvDt2rVDbGys9z7l5eXo1asXnE5ns+5rc+9LU47VsXDgwIEmCflLL72Er7/+Gpdeeim++OILsQDYvHkzbrrpJlitVu/9fvvtN/z73//G5MmTxf2uuuoqvPXWW/VO7vfcc48Q9CeffBL/+9//EBwcjBtuuAGZmZmH3I/7778fv/zyS63bAgMDxTHh5amKXq9H+/btERERccR/y06SXASkpqaekH2TtDDYO1Ry6pKbm+vp0qWL57vvvjvk/X7//XdxP4fDcdL27Uj35bHHHvOMHj262Y/VsfDBBx806TUUFRV5SktLa922ZMkSsX8rV6703jZhwgTPPffcU+t+r776qmfw4MEem80mfl67dq34u4ULF3rvw9+NGjXK89xzzzW6DxaLxdO/f3/PtGnTjug1nu6sW7dOHM+UlJTm3hXJSUBagqcw33zzDS6++GJx/YUXXkDXrl3x8ssvi59pjdC6IK+//rqwEEjPnj1r3a8hioqK8Mwzz4jVcO/evXHmmWfiyy+/FCtklTVr1ojHSUlJwSOPPILBgwdj0KBBuPHGG7F3795GH/tw+2IwGLBq1SphIdH9N378ePE3dru91uPQbfjggw9i6NChGDBgAG6//XaxL8d6rAiv07JKT0/HtddeK47BG2+84XWnXn/99eL19u/fH+eddx4+/PBDr1X13nvvITc3Vzw+t8bccWFhYcJa8yUhIUFcFhQUiEs+f0ZGBiZOnFjrflOmTEFpaalwW5KVK1fCZDIJl6qK0WjEuHHjsGjRogaff+3atcK1Srfh008/LfaV75/6ePyZ77EKf547d66wnkeMGCFcrjw2tHzpduV13sZj+dprr9Wz8vmZ4Hs0cOBADBkyRLx36uskfJ18Du4X94fvKx+voc8TLXlau2eccYbwKPB18z2lh0GFz8/He//99723cR9fffVVzJgxQ7xvfF95bD/66CPvZ5vvF61x9TjzMe666y7xc05OjnBZjxw50vu3TzzxBCoqKho8xpJTA31z74Dk6OFJLjExEXfeeafY+KWMjIysdz/GwPhFZWyJm1arbfB+pLKyUpwseH+eqHhippvu7bffFidliqMvvO8FF1wgTv4UTwoWBeSff/4RLqkj3Ree3J999lnxevjaVqxYIU5SdM3961//8sa/rrjiCiEidCtSOOneZByMzxsSEnLUx0qFJ9477rhDxAsfeOABREVFiX275ZZbxMmRJ0aejHk/jUYj/ob3pytz69at4iRN4uPj0VTUGFyPHj3EZXJysrikW88X9WcK0PDhw3Hw4EHx2uoeb96Px5hCFxAQUOt3nTp1EsfO93g09H758vzzzwsBoBDyveYign/LBcrNN98s3neKLt22bdq0wdVXXy3+Li0tTbxffF38HNlsNnFJgZs+fbp4/1S4kDjnnHPwzjvviPeZ9+NnjO+r+n5xETVr1izcfffdQijp8n333XexadMm/Pzzz2IB0Bh///23EHnuN12lFET+bVxcHC688EJxHCimH3zwgVjcxMTEeD9PdKW73W7xuvl5pLt0165dp7TbWCJF8JQmKSlJiAihWHF12hAdOnRAdHS01/o61Mnu999/x/79+/HHH3+ge/fu4jauynli4QqfVlDbtm2996e1+PDDD3t/Lisrw3PPPSdW9owrHem+8ARE0aOlRXjJkxbjXaoIMpbGk/CPP/7oFRk+Fq1GxrcoVEd7rFRoVVLQeWJU2bZtG6qqqoSQq/tHq0ilW7duCA0NFa/pcI9fFy4M+LrHjh2Ljh07eo8FqXuSDQoKEpcUCfV+6m0N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", "text/plain": [ "
" ] @@ -438,10 +438,10 @@ "id": "1705509c0f25", "metadata": { "execution": { - "iopub.execute_input": "2026-10-09T17:29:14.423345Z", - "iopub.status.busy": "2026-10-09T17:29:14.423278Z", - "iopub.status.idle": "2026-10-09T17:29:14.673085Z", - "shell.execute_reply": "2026-10-09T17:29:14.672693Z" + "iopub.execute_input": "2026-10-10T01:29:01.941958Z", + "iopub.status.busy": "2026-10-10T01:29:01.941893Z", + "iopub.status.idle": "2026-10-10T01:29:02.184685Z", + "shell.execute_reply": "2026-10-10T01:29:02.184333Z" } }, "outputs": [ @@ -454,7 +454,7 @@ }, { "data": { - "image/png": "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1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAiC1yIiKAiCIHgtIoKCIAgCvJX/B94og/MEqa7IAAAAAElFTkSuQmCC", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcEAAAHWCAYAAAAPaDLLAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAmN5JREFUeJztnQV4U2f7xu9I3ZW2UKy4uzMGA7YxZcbc7ZvbN9+3/efuvjFXZIwNhg93Ntzd625p7H/db3rStKQGpU2b58d1roY0jZycc+73cZ3dbrdDEARBELwQfUO/AUEQBEFoKEQEBUEQBK9FRFAQBEHwWkQEBUEQBK9FRFAQBEHwWkQEBUEQBK9FRFAQBEHwWkQEBUEQBK9FRFAQBEHwWjxKBB9//HGcccYZjfb5a8rhw4dx0UUXYdSoUW5/bzKZ8Nprr2HEiBHo0aMHLr30UixbtuyEx+3cuRO33HIL+vXrh/79++Phhx9GRkbGSb2nr7/+GmeddRYKCgrQWPnnn38wbNgw/Pvvv2gM8Pt/5JFH0BhZvXo1OnbsiBUrVjSq83PdunW4/PLL0atXLwwaNAhLly7F+PHj8fLLL6MhmDx5stqPR44cOeXn4me45JJLUF/H68un+fWatAjm5eWhW7dusFgsaAr89NNPNb6YLV68WIlaZmZmpY/53//+p06Oe+65B1999RU6d+6MO++8E5s2bXI+Jj09HTfddBOKi4vx7rvv4tVXX8WOHTtw2223wWq1Vvrc7JJHoTh48GC5+6OiotC6dWv4+PigsRIcHKw+A3/Wlr179562CzC/86uuuuq0PHdjpCHP//vvv1+dH59++ineeOMNJYY8ZuLi4qp9f55+3WrWrJn6LE319U4XRjQACxYsgNlsRlNh7ty5iI6OrvZxK1euxH/+8x/cd9996kT67bff3FqJf/zxB5566im1YiV9+/bFtm3b8OGHH+Lzzz9X9/3yyy/Iz8/HBx98gMjISHVfixYtcOGFF6r3c+6551ZqLaWlpZ1wP/+OW2OGK+offvjhpP529uzZOF3MmTPntD13Y6Shzv/U1FS1eLzrrruUFajxzjvv1Oj9efp1i16hpvx6TcYSpJvvySefVLe7du2qLlwvvfSS8/e0RCgWl112mXIFjhw5Uv1NSUlJuec5fvw4HnroIQwcOBB9+vTBHXfcgQMHDtT6/fz444+4+uqr1fNQbK655hps3Lix3GOmTJmi3JdcNfJxV155pRIaWnPnn3++er9//vmn+izctm/f7va1BgwYgG+++UZZdZX1LaebyWazYfTo0c77dDodxo4dq1xPdJUSviY/tyaAhK/NldnChQvdPjdf++abb1a3+Xx8PC8I2oWA/3d9H/z//v37lWj37t1buVwfffRRJb78vBdccIH6js4++2y3gj5//nz1Pfbs2VNZWXwN11U0/4afga/B98X9y330xBNPIDc3t9xzcV/TQqYV2717d5xzzjnKheu6H7l/+J753l33ybx585S1TPcy3wu/S743jQceeADvv/8+UlJSnN8h95XmPrvhhhvUZ+c+4Gf+6KOPUBP4PfJYmTp1qnLRas/t+to83r///nuMGTNG7ctx48ap462im/Dee+9VC6TrrrtOff7XX3/d+Xsei1ww8e+5/+6++25l2brCv3NnjdKDUdEtv2XLFlx77bXq+QYPHoznn38ea9euLXd8uFpHPCa4f7jxwrhnzx6PO/+/++47p+uOn8f1dXlsch9X9f6qe988TriPeYwMGTIEzz333AmhBX4n3D88Bvk9Pf30087zuSr4vC+88AKmTZumzjVaozx/f/311yq/y9qcX7m5uer8Gjp0qPoMfE1Xz5M73L0ev49Dhw6pxT6fh4sNerSOHTtW7m/5fb755pvOc5LesSVLlsArLEGerLyITpo0SW16vb6cFZWTk4Nnn31W7URaNsuXL8cnn3yiXFw8uUl2dra6uISGhuLFF19UJw7dGzxxZ86cibCwsBq/HwoeDwyeROTtt99Wr8NVn5+fn4oZ8GBlvI0HFA+WDRs2IDAwUL2nV155Rb1XuiwpFqRNmzZuX8tgMKjXqgoesP7+/uXcM9pzchVKN2aHDh3U43giVISPq+wixJgfL1q0KHkhpzujun114403YsKECc7FAfcPn7+wsFB93oiICEycOFFZrjw5+d7IX3/9pS5SV1xxhdp3vEDR/ZSVlaUuQhq8UNCFy++O3wHjnHwNnkhcoBC+Fk9KHjd8zubNm6vvgI+jMPDkrYr/+7//UxcAXpiMRiM+/vhjJXw8Vlq1aqUWJXQr86T/7LPP1N8kJCSoY/HWW29V+5mLBbrRdu3apRYlNYHHNvcLj2f+LY9VwtfU4InPz/Df//4XISEhypLl33Axw1ivBl+X75Px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QRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEr0VEUBAEQfBaRAQFQRAEeCv/D2wmggOSrZjvAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -476,7 +476,7 @@ "source": [ "## `apply_model` and its modes\n", "\n", - "`hyp.apply_model(data, model, mode=)` runs any registered name, class, dict spec or scikit-learn-style instance on the stacked data. `mode='auto'` (the default) prefers `predict_proba`, then `fit_transform`/`transform`, then `fit_predict`; `'fit_transform'`, `'fit_predict'` and `'predict_proba'` ask for one explicitly, and a model that cannot honour it raises a `ValueError` naming what it does support. A list is a pipeline, and an explicit mode applies to its final stage; `return_model=True` then hands back a fitted `hyp.Pipeline`." + "`hyp.apply_model(data, model, mode=)` runs any registered name, class, dict spec or scikit-learn-style instance on the stacked data. `mode='auto'` (the default) prefers `predict_proba`, then `fit_transform`/`transform`, then `fit_predict`; `'fit_transform'`, `'fit_predict'` and `'predict_proba'` ask for one explicitly, and a model that cannot honor it raises a `ValueError` naming what it does support. A list is a pipeline, and an explicit mode applies to its final stage; `return_model=True` then hands back a fitted `hyp.Pipeline`." ] }, { @@ -485,10 +485,10 @@ "id": "d58fa62fe326", "metadata": { "execution": { - "iopub.execute_input": "2026-10-09T17:29:14.674218Z", - "iopub.status.busy": "2026-10-09T17:29:14.674148Z", - "iopub.status.idle": "2026-10-09T17:29:14.693473Z", - "shell.execute_reply": "2026-10-09T17:29:14.692916Z" + "iopub.execute_input": "2026-10-10T01:29:02.185932Z", + "iopub.status.busy": "2026-10-10T01:29:02.185850Z", + "iopub.status.idle": "2026-10-10T01:29:02.202897Z", + "shell.execute_reply": "2026-10-10T01:29:02.202392Z" } }, "outputs": [ @@ -500,7 +500,7 @@ "fit_predict: [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]\n", "predict_proba: [(200, 3), (200, 3), (200, 3)] rows sum to [1. 1. 1.]\n", "list spec: Pipeline([pca=PCA(n_components=3), kmeans=KMeans(n_clusters=4)])\n", - "a mode the model cannot honour: PCA does not support mode='predict_proba' (it has no matching method); this model supports: fit_tran ...\n" + "a mode the model cannot honor: PCA does not support mode='predict_proba' (it has no matching method); this model supports: fit_tran ...\n" ] } ], @@ -519,7 +519,7 @@ "try:\n", " hyp.apply_model(train, 'PCA', mode='predict_proba')\n", "except ValueError as error:\n", - " print('a mode the model cannot honour:', str(error)[:100], '...')" + " print('a mode the model cannot honor:', str(error)[:100], '...')" ] }, { @@ -538,10 +538,10 @@ "id": "c869e787c10e", "metadata": { "execution": { - "iopub.execute_input": "2026-10-09T17:29:14.694729Z", - "iopub.status.busy": "2026-10-09T17:29:14.694667Z", - "iopub.status.idle": "2026-10-09T17:29:14.697140Z", - "shell.execute_reply": "2026-10-09T17:29:14.696702Z" + "iopub.execute_input": "2026-10-10T01:29:02.204122Z", + "iopub.status.busy": "2026-10-10T01:29:02.204062Z", + "iopub.status.idle": "2026-10-10T01:29:02.206548Z", + "shell.execute_reply": "2026-10-10T01:29:02.206083Z" } }, "outputs": [ @@ -606,10 +606,10 @@ "id": "d6f0616ba909", "metadata": { "execution": { - "iopub.execute_input": "2026-10-09T17:29:14.698219Z", - "iopub.status.busy": "2026-10-09T17:29:14.698164Z", - "iopub.status.idle": "2026-10-09T17:29:14.787696Z", - "shell.execute_reply": "2026-10-09T17:29:14.787081Z" + "iopub.execute_input": "2026-10-10T01:29:02.207599Z", + "iopub.status.busy": "2026-10-10T01:29:02.207544Z", + "iopub.status.idle": "2026-10-10T01:29:02.297679Z", + "shell.execute_reply": "2026-10-10T01:29:02.297316Z" } }, "outputs": [ @@ -656,10 +656,10 @@ "id": "fb0ccf42520e", "metadata": { "execution": { - "iopub.execute_input": "2026-10-09T17:29:14.789033Z", - "iopub.status.busy": "2026-10-09T17:29:14.788945Z", - "iopub.status.idle": "2026-10-09T17:29:14.843001Z", - "shell.execute_reply": "2026-10-09T17:29:14.842490Z" + "iopub.execute_input": "2026-10-10T01:29:02.299097Z", + "iopub.status.busy": "2026-10-10T01:29:02.299011Z", + "iopub.status.idle": "2026-10-10T01:29:02.349397Z", + "shell.execute_reply": "2026-10-10T01:29:02.348835Z" } }, "outputs": [ diff --git a/docs/tutorials/projectile_kalman.ipynb b/docs/tutorials/projectile_kalman.ipynb index 6c3ecaf7..1bf40d0e 100644 --- a/docs/tutorials/projectile_kalman.ipynb +++ b/docs/tutorials/projectile_kalman.ipynb @@ -619,7 +619,7 @@ "the true recorded coordinate, the Kalman-imputed one, and (as `x` markers) just the\n", "entries that were imputed -- whether from the occlusion band or a scattered\n", "single-cell dropout. The occluded frames (15-19) are marked by a fourth dataset: the\n", - "true values over those frames, drawn as a thick translucent grey stroke\n", + "true values over those frames, drawn as a thick translucent gray stroke\n", "underneath (`color=` and `linewidth=` take one value per dataset). `ndims=1` series\n", "mode draws each dataset directly against its own row index (here, the real frame\n", "number), so there's no more hand-built `(frame, value)` column stack -- a plain\n", @@ -841,7 +841,7 @@ "source": [ "### Forecast, visualized (side view: x vs. z)\n", "\n", - "All three series share the trace's colour and the legend names them. The\n", + "All three series share the trace's color and the legend names them. The\n", "plain solid line is the observed rising portion the model was fit on; the\n", "dashed, half-opacity line continuing it is the Kalman forecast `hyp.plot`\n", "computes itself from `predict=`/`t=` (`forecast_fmt='--'` dashes it); the\n", diff --git a/docs/tutorials/weather_decades.ipynb b/docs/tutorials/weather_decades.ipynb index f60ac732..47e4c320 100644 --- a/docs/tutorials/weather_decades.ipynb +++ b/docs/tutorials/weather_decades.ipynb @@ -44,7 +44,7 @@ "observation of \"what the world's weather was doing\", and `hyp.plot`\n", "reduces that stream to a 3-D path.\n", "\n", - "Every point on the path is coloured by the **average temperature across all\n", + "Every point on the path is colored by the **average temperature across all\n", "twenty cities** on a diverging blue-cold / red-hot scale\n", "(`palette='RdBu_r'`), so the seasons show up as the path sweeping between\n", "the ends of the colormap and the slow warming trend shows up as where the\n", @@ -54,7 +54,7 @@ "scale, and `chemtrails=True` leaves the traversed path glowing faintly\n", "behind the moving head as 138 years play in one two-minute camera orbit.\n", "\n", - "The colour axis, the colorbar and the trail are all the library's; the\n", + "The color axis, the colorbar and the trail are all the library's; the\n", "example adds no `ScalarMappable` and reaches for nothing private. What it\n", "does add is one `anim.on_frame` hook that keeps three things in step with\n", "the head of the path, every frame:\n", @@ -62,18 +62,18 @@ "* a **figure-wide title** naming the month the head is passing through\n", " (\"March 1954\");\n", "* a **world map** (Natural Earth 110 m coastlines, fetched once and cached)\n", - " with one dot per city, coloured by *that city's* temperature that month\n", + " with one dot per city, colored by *that city's* temperature that month\n", " through the *same* colormap and value range as the path's colorbar --\n", " so tropical cities sit at the red end all year while the mid-latitude\n", " ones flip between blue and red with the seasons, out of phase across the\n", " equator;\n", "* a **mean-temperature-vs-time** panel, sharing its left and right edges\n", - " with the map: the full 138-year series drawn faintly in grey once, the\n", - " months revealed so far growing over it as a line coloured **segment by\n", + " with the map: the full 138-year series drawn faintly in gray once, the\n", + " months revealed so far growing over it as a line colored **segment by\n", " segment by the mean temperature it is drawn at** (same colormap and\n", - " range again), and a head marker on the current month coloured like the\n", + " range again), and a head marker on the current month colored like the\n", " head of the path. The raw monthly mean swings by ~12 °C\n", - " every year (the coloured line and the marker bounce with it), so a\n", + " every year (the colored line and the marker bounce with it), so a\n", " trailing 12-month rolling mean is drawn in plain black over the revealed\n", " months to let the warming drift show through the seasons.\n", "\n", @@ -142,7 +142,7 @@ "MONTHS = ('January', 'February', 'March', 'April', 'May', 'June', 'July',\n", " 'August', 'September', 'October', 'November', 'December')\n", "# map-label nudges (x points, y points, alignment) for the crowded corners\n", - "# of the archive's twenty cities; everything else is labelled to the right\n", + "# of the archive's twenty cities; everything else is labeled to the right\n", "LABEL_OFFSETS = {'Chicago': (-5, 4, 'right'), 'Montreal': (4, 5, 'left'),\n", " 'New_York': (4, -9, 'left'), 'Seoul': (-5, 4, 'right'),\n", " 'Shanghai': (3, -9, 'left'), 'Tokyo': (4, 3, 'left'),\n", @@ -320,7 +320,7 @@ " mean = data.temps.mean(axis=1) # the hue: raw monthly mean\n", " n_months = len(mean)\n", " # THE hypertools call: twenty cities as twenty FEATURES of one path,\n", - " # coloured by the average temperature across them on a blue-cold /\n", + " # colored by the average temperature across them on a blue-cold /\n", " # red-hot scale, one camera orbit over the two-minute reveal. Stage\n", " # order is the library's: manip -> normalize -> reduce -> animate.\n", " # An animated line is resampled onto the frame grid, so the frame rate\n", @@ -345,7 +345,7 @@ " cbar_ax.set_position([0.50, 0.22, 0.014, 0.50])\n", " cbar_ax.yaxis.label.set_fontsize(11)\n", "\n", - " # The map and the path share ONE colour scale: the colorbar spans the\n", + " # The map and the path share ONE color scale: the colorbar spans the\n", " # hue's actual range, so the same norm sends each city's own monthly\n", " # temperature through the same colormap (extremes saturate).\n", " norm = matplotlib.colors.Normalize(mean.min(), mean.max())\n", @@ -372,9 +372,9 @@ " color='0.25')\n", "\n", " # Mean temperature over time: the whole raw series once, faintly; then\n", - " # the raw months revealed so far, each segment coloured by the value it\n", + " # the raw months revealed so far, each segment colored by the value it\n", " # ends at, a trailing 12-month mean over them in black, and a marker on\n", - " # the current month coloured like the head of the path. The panel takes\n", + " # the current month colored like the head of the path. The panel takes\n", " # its left/right edges from the map's DRAWN box (equal aspect shrinks\n", " # the map inside the box it was given), so the two line up exactly.\n", " when = data.years + (data.months - 1) / 12\n", diff --git a/examples/animate_conversation.py b/examples/animate_conversation.py index 8d080f1a..657899bf 100644 --- a/examples/animate_conversation.py +++ b/examples/animate_conversation.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """ ========================================================================= -The shape of a conversation: one path per turn, coloured by its speaker +The shape of a conversation: one path per turn, colored by its speaker ========================================================================= A conversation as geometry, in one ``hyp.plot`` call on raw dialogue. Each @@ -10,18 +10,18 @@ of strings**: the nesting is the grouping, so every turn becomes its own disjoint trajectory through one shared 3-D space. The call embeds every window with a sentence-transformer (``vectorizer='all-MiniLM-L6-v2'``), -reduces them together with UMAP, colours each path by **speaker** through a +reduces them together with UMAP, colors each path by **speaker** through a categorical ``hue=`` with a native legend, and ``order='serial'`` reveals the turns one at a time with ``chemtrails=True`` leaving the spoken path behind each head. ``title=`` carries one string per turn -- just the words being spoken, wrapped onto two lines when a turn is long so nothing runs off the figure -- and the library's own reveal schedule advances it; the title -never names the speaker, because the *colour* does: ``title_color=`` takes -one colour per turn and the library retints the title with the current -speaker's colour every frame, while ``title_kwargs={'size': ...}`` sets its +never names the speaker, because the *color* does: ``title_color=`` takes +one color per turn and the library retints the title with the current +speaker's color every frame, while ``title_kwargs={'size': ...}`` sets its size (and the library now reserves the animated 3-D title's own vertical margin, sized to the tallest wrapped title, so the figure never has to grow -by hand); the legend maps colours to names. +by hand); the legend maps colors to names. The one effect written out by hand is a **recency fade** across turns: the current turn is opaque, earlier turns recede slowly (a turn keeps most of @@ -46,14 +46,14 @@ stripped, so the geometry reflects what the characters *say*, not how the narrator introduces them -- otherwise every one of Alice's turns would be pulled together by the repeated words "said Alice" rather than by their -content. Who is speaking is carried by the colour (paths and title alike) +content. Who is speaking is carried by the color (paths and title alike) and the legend. **Embeddings.** Sentence embeddings come from the ``[text]`` extra, which hypertools installs on demand the first time an embedding model is requested; nothing here checks for it. The test-suite drives the same pipeline (embed -> reduce -> disjoint per-turn paths -> serial reveal -coloured by speaker) through ``fixture_data``, which embeds with +colored by speaker) through ``fixture_data``, which embeds with ``vectorizer='TfidfVectorizer'`` so no test downloads a model. """ @@ -120,7 +120,7 @@ # at ~0.32, so the recent past of the conversation lingers on screen. FLOOR, DECAY = 0.18, 0.7 # Title size and wrap width. At 14 pt a character is ~8.7 px wide at 100 dpi, -# so a 64-character line is ~560 px over the 800 px-wide axes -- centred with +# so a 64-character line is ~560 px over the 800 px-wide axes -- centered with # clear margin either side -- and the longest turn (117 characters, 119 with # the quotes the title adds) wraps to exactly two lines; no turn needs a # third (verified by rendering turns 15-17 and 22, the long ones). @@ -238,14 +238,14 @@ def construct_artifact(data): HyperAnimation wrapper: `.on_frame()` lives on it, not on the FuncAnimation that `fig, ani = ...` would give.""" # category order is FIRST APPEARANCE, not alphabetical, so the palette - # must be listed in that order for each speaker to get their colour + # must be listed in that order for each speaker to get their color order = list(dict.fromkeys(data.speakers)) - # the title is JUST the spoken line (who says it is the title's colour), + # the title is JUST the spoken line (who says it is the title's color), # wrapped so the longest turn fits the figure on two lines titles = [textwrap.fill(f'\u201c{text}\u201d', TITLE_WIDTH) for text in data.texts] # THE hypertools call: raw dialogue in, one disjoint trajectory per - # turn, coloured by speaker, revealed ONE TURN AT A TIME. backend= is + # turn, colored by speaker, revealed ONE TURN AT A TIME. backend= is # pinned because the hook sets matplotlib alphas, and on Colab the # default backend would be plotly. anim = hyp.plot( diff --git a/examples/animate_forecast.py b/examples/animate_forecast.py index 0031894a..cafe5699 100644 --- a/examples/animate_forecast.py +++ b/examples/animate_forecast.py @@ -25,11 +25,11 @@ Three keywords restyle the forecasts without touching the observed paths: ``forecast_hue=`` groups the forecasts (the two Old World regions share a -colour, the Americas have their own), ``forecast_palette=`` gives that -grouping its own colours, and ``forecast_fmt=`` draws every forecast dashed. +color, the Americas have their own), ``forecast_palette=`` gives that +grouping its own colors, and ``forecast_fmt=`` draws every forecast dashed. Everything they do not name is inherited from the trace a forecast -continues. A forecast that inherits its trace's colour is drawn at half -the trace's alpha; these carry their own colours from +continues. A forecast that inherits its trace's color is drawn at half +the trace's alpha; these carry their own colors from ``forecast_palette=``, so each current forecast is drawn at full opacity, and with ``forecast_trail=True`` only the earlier fits fade. @@ -147,7 +147,7 @@ def construct_artifact(data): # shared space; `predict=` refits on every distinct revealed history # and `forecast_trail=` keeps the earlier fits as a fading fan. The # three `forecast_*` keywords restyle the forecasts only: the two Old - # World regions' forecasts share a colour, the Americas' has its own, + # World regions' forecasts share a color, the Americas' has its own, # all three are dashed, and each still continues the path it belongs # to. `slow_warning_seconds=None` silences the long-schedule notice: # the 180 fits this clip needs measured about 6 s, a known wait. diff --git a/examples/animate_market_sectors.py b/examples/animate_market_sectors.py index d4828a71..6b928cec 100644 --- a/examples/animate_market_sectors.py +++ b/examples/animate_market_sectors.py @@ -20,13 +20,13 @@ 3. ``hyp.plot`` draws all six, plus a seventh, heavier path: the **market**, the point-by-point mean of the six aligned sector paths. -**Colour is the market's composition.** Every path is coloured through the +**Color is the market's composition.** Every path is colored through the library's *mixture* hue: ``hue=`` carries one row of weights per month and -``palette=`` the six sector colours, and each point is drawn in the +``palette=`` the six sector colors, and each point is drawn in the weighted blend (``hue_mode='mixture'``). A sector's weights are a one-hot -row, so it keeps its own colour; the market path's weights are each -sector's **share of the basket's market capitalisation** that month -(reported share counts x price), so its colour shifts toward whichever +row, so it keeps its own color; the market path's weights are each +sector's **share of the basket's market capitalization** that month +(reported share counts x price), so its color shifts toward whichever sectors dominate -- away from technology red as the dot-com bubble deflates (about a third of the basket in mid-2000, a fifth by 2004), toward financial gold before 2008 (the largest sector in 2006), then back to @@ -52,7 +52,7 @@ counts, which the SEC's XBRL API (the per-concept endpoint, falling back to company facts; quarterly, from 2009) reports as they stood on the day, are multiplied by every later split before they meet the price. Earlier months -back-fill the first reported capitalisation along the adjusted price. +back-fill the first reported capitalization along the adjusted price. XOM's counts are read from Exxon Mobil Corp's filings (CIK 34088), not the holding company the SEC's ticker map now names. HON's 2026-06-30 count in the SEC data (316,940,010, from a 10-Q/A) is half its 2026-03-31 count @@ -180,7 +180,7 @@ def fetch_shares(tickers, splits): or ``None``. The counts are filed as they stood on the day; each is multiplied by the ratio of every LATER split in `splits` (ticker -> [(date, ratio)]), which puts it in the units of Yahoo's split-adjusted - close -- the pair multiply to the true capitalisation, even in the + close -- the pair multiply to the true capitalization, even in the months between a split and the next filing.""" if os.environ.get('HYPERTOOLS_OFFLINE'): raise RuntimeError('HYPERTOOLS_OFFLINE is set: refusing to fetch') @@ -302,8 +302,8 @@ def construct_artifact(data): aligned = hyp.align(reduced, model='HyperAlign') market = np.mean(aligned, axis=0) # mixture hue: one row of weights per month, blended through the six - # sector colours. One-hot rows keep a sector its own colour; the market - # path's rows are the sectors' shares of the basket's capitalisation. + # sector colors. One-hot rows keep a sector its own color; the market + # path's rows are the sectors' shares of the basket's capitalization. hue = [np.tile(np.eye(len(names))[i], (n_months, 1)) for i in range(len(names))] + [data.weights.to_numpy()] # THE call: seven paths, one minute, three turns of the camera; a diff --git a/examples/animate_morph_zoo.py b/examples/animate_morph_zoo.py index a0f1e054..3c41f0f8 100644 --- a/examples/animate_morph_zoo.py +++ b/examples/animate_morph_zoo.py @@ -56,7 +56,7 @@ # is essentially all-unique (bunny 35947/35947, vase 36022/36022, cube # 30034/30246, sphere 29891/30135). Its segment therefore draws with a few # hundred distinct dots rather than a couple of thousand and reads sparser than -# its neighbours. That is the shipped dataset, not a fault in this example. +# its neighbors. That is the shipped dataset, not a fault in this example. SHAPES = ['bunny', 'cube', 'sphere', 'teapot', 'vase'] # The isotropic Normalize in assemble() is NOT redundant with hyp.plot: plot # rescales every dataset with ONE shared affine, so clouds left in their own @@ -104,7 +104,7 @@ def assemble(clouds, n, source, seed=0): rng = np.random.default_rng(seed) sampled = [] for name, points in clouds.items(): - # one shared centre and scale per cloud (mode='isotropic'): the shape + # one shared center and scale per cloud (mode='isotropic'): the shape # keeps its proportions and its largest extent touches the cube points = np.asarray(hyp.manip(points, model='Normalize', mode='isotropic', min=-1, max=1), diff --git a/examples/animate_painting_embeddings.py b/examples/animate_painting_embeddings.py index ae373423..23a9cc8a 100644 --- a/examples/animate_painting_embeddings.py +++ b/examples/animate_painting_embeddings.py @@ -13,25 +13,25 @@ the input is the grouping), spins the camera, and annotates each cloud with its painting's name. -Each cloud is drawn in a colour taken from the **actual canvas**: +Each cloud is drawn in a color taken from the **actual canvas**: ``hypertools.plot.colors.image_palette`` clusters the downloaded image's pixels and orders the result by ``pixel_fraction * chroma``, so the vivid subject wins rather than the muted background -- Starry Night comes out cobalt, not canvas-beige. The right-hand column shows, for each painting, its name with the artist and year, the complete description that was -embedded (in that painting's colour, so nothing about the geometry is -hidden), and a thumbnail of the canvas itself, vertically centred on its +embedded (in that painting's color, so nothing about the geometry is +hidden), and a thumbnail of the canvas itself, vertically centered on its description. **Data & graceful degradation.** The descriptions are bundled inline (so the text side is fully offline and deterministic). Each canvas is downloaded once from Wikimedia Commons and cached; if an image cannot be fetched, a -hand-picked representative colour is used instead, the thumbnail slot shows -a flat swatch of that colour, and the run says so. Sentence embeddings come +hand-picked representative color is used instead, the thumbnail slot shows +a flat swatch of that color, and the run says so. Sentence embeddings come from the ``[text]`` extra, which hypertools installs on demand the first time an embedding model is requested; nothing here checks for it. The test-suite drives the same pipeline (embed -> reduce together -> one -cloud/colour per painting -> spin) through ``fixture_data``, which embeds +cloud/color per painting -> spin) through ``fixture_data``, which embeds with ``vectorizer='TfidfVectorizer'`` so no test downloads a model. """ @@ -143,7 +143,7 @@ class Paintings(NamedTuple): colors: list # one RGB tuple per painting images: list # per painting, the cached canvas path or None vectorizer: str # how the windows are embedded - source: str # which path produced the colours + source: str # which path produced the colors def windows(text, size=WINDOW, step=STEP): @@ -178,23 +178,23 @@ def fetch_canvas(spec): return dest except Exception as error: print(f'canvas {spec["file"][:20]}... unavailable ({error!r}); ' - 'using its hand-picked colour and a flat swatch') + 'using its hand-picked color and a flat swatch') return None def canvas_color(spec, path): - """The painting's most salient colour, from the real canvas. + """The painting's most salient color, from the real canvas. - Choosing the colour is the library's job: ``image_palette`` orders + Choosing the color is the library's job: ``image_palette`` orders clusters by ``pixel_fraction * chroma``, so a small vivid region beats a large muted one. Ordering by cluster SIZE -- which is what this example used to do -- returns the background. - One legibility floor on top of that ordering: the first colour whose + One legibility floor on top of that ordering: the first color whose luminance is at most MAX_LUMINANCE. Measured on the real canvases, The Great Wave's two most salient clusters are its cream sky and foam (luminance 0.88 and 0.94), which vanish on a white page; its Prussian - blue is third. Without a canvas, the hand-picked colour stands in. + blue is third. Without a canvas, the hand-picked color stands in. """ if path is None: return to_rgb(spec['fallback']) @@ -212,7 +212,7 @@ def load_paintings(paintings=PAINTINGS): def fixture_data(paintings=PAINTINGS): - """The same payload with every colour drawn from the one committed + """The same payload with every color drawn from the one committed thumbnail, no canvas images (flat swatches stand in), and a deterministic TF-IDF embedding. No network, no model.""" names = list(paintings) @@ -254,7 +254,7 @@ def construct_artifact(data): """`data.descriptions` / `data.colors` / `data.images` in, the animation out. Returns the HyperAnimation wrapper, never the unpacked pair.""" # labels= in its per-OBSERVATION form: one sub-list per cloud, carrying - # the painting's name on its MIDDLE window (roughly the centre of a text + # the painting's name on its MIDDLE window (roughly the center of a text # trajectory) and None everywhere else. (1.1 also takes one label per # dataset, placed by label_anchor=; this form names the window itself.) labels = [[name if i == len(cloud) // 2 else None @@ -287,7 +287,7 @@ def construct_artifact(data): ax.title.set_visible(True) # one block per painting: bold name, then artist and year in italics # (placed after measuring the name), then the description that was - # actually embedded, all in that cloud's colour + # actually embedded, all in that cloud's color text_x = MARGIN + (box_hi[0] - box_lo[0]) + GAP blocks, texts = [], [] for i, name in enumerate(data.names): @@ -309,7 +309,7 @@ def construct_artifact(data): boxes = [figure_box(t) for t in texts] text_x1 = max(b.x1 for b in boxes) text_mid = (max(b.y1 for b in boxes) + min(b.y0 for b in boxes)) / 2 - # slide the axes so the box sits MARGIN from the left edge, centred on the + # slide the axes so the box sits MARGIN from the left edge, centered on the # text column (a translation: the projection's scale only depends on the # axes' size), then hang the title just above its highest projected point shift = np.array([MARGIN - box_lo[0], text_mid - (box_lo[1] + box_hi[1]) / 2]) @@ -323,7 +323,7 @@ def construct_artifact(data): ax.set_title(ax.get_title(), fontproperties=ax.title.get_fontproperties(), y=(top - y0) ** 2 / (figure_box(ax.title).y0 - y0)) # thumbnails: a missing canvas becomes a flat 4:3 swatch of the painting's - # colour, so the layout is identical offline + # color, so the layout is identical offline thumbs = [np.full((3, 4, 3), color) if path is None else imread(path) for path, color in zip(data.images, data.colors)] aspects = [im.shape[0] / im.shape[1] for im in thumbs] @@ -331,7 +331,7 @@ def construct_artifact(data): width = min(1 - MARGIN - (text_x1 + GAP), THUMB_MAX_H * fig_h / (max(aspects) * fig_w)) for (head, body), im, aspect in zip(blocks, thumbs, aspects): - # true aspect, centred on the block's vertical midpoint + # true aspect, centered on the block's vertical midpoint head_box, body_box = figure_box(head), figure_box(body) height = width * aspect * fig_w / fig_h middle = (max(head_box.y1, body_box.y1) + min(head_box.y0, body_box.y0)) / 2 diff --git a/examples/animate_surface_morph.py b/examples/animate_surface_morph.py index b59b5400..aa82f459 100644 --- a/examples/animate_surface_morph.py +++ b/examples/animate_surface_morph.py @@ -7,7 +7,7 @@ Building on the *Morphing through the shapes zoo, with titles* example, this one wraps the moving point cloud in a smooth, lit convex-hull SURFACE: the ``surface=`` kwarg of `hyp.plot` combined with ``animate='morph'``. The hull -mesh is recomputed from the travelling cloud on every frame, shaded with a +mesh is recomputed from the traveling cloud on every frame, shaded with a two-light Blinn-Phong model and backface-culled for the current camera angle, so a blue-teal "skin" flows continuously from the bunny to the cube, the sphere, the teapot and the vase as the points underneath rearrange @@ -31,7 +31,7 @@ and every transition a brisk quarter-turn, so the camera visibly steps forward each time one shape morphs into the next. -Each cloud is first centred and scaled into the [-1, 1] cube with +Each cloud is first centered and scaled into the [-1, 1] cube with ``hyp.manip(..., model='Normalize', mode='isotropic')`` -- one centroid and one scalar per shape, so proportions are preserved -- because `hyp.plot` draws every dataset in one shared frame. Five of the zoo's seven shapes are @@ -53,7 +53,7 @@ import hypertools as hyp -# five of the zoo's seven shapes, each centred and scaled into the [-1, 1] +# five of the zoo's seven shapes, each centered and scaled into the [-1, 1] # cube with one shared centroid and scalar (mode='isotropic'), so every shape # keeps its proportions inside hyp.plot's shared frame shapes = ['bunny', 'cube', 'sphere', 'teapot', 'vase'] diff --git a/examples/animate_trails.py b/examples/animate_trails.py index 49e5d1d8..c5b0e011 100644 --- a/examples/animate_trails.py +++ b/examples/animate_trails.py @@ -6,7 +6,7 @@ Animated plots can show more than the current position along each trajectory. ``chemtrails=True`` leaves a low-opacity trace of the path -*already travelled* behind the moving points; ``precog=True`` draws a +*already traveled* behind the moving points; ``precog=True`` draws a low-opacity trace of the path *still to come* ahead of them. Combining both (or passing ``bullettime=True``) shows the entire timeseries at low opacity with the current segment highlighted. The data are two diff --git a/examples/animate_weather_decades.py b/examples/animate_weather_decades.py index 2e8bdf00..924b4130 100644 --- a/examples/animate_weather_decades.py +++ b/examples/animate_weather_decades.py @@ -12,7 +12,7 @@ observation of "what the world's weather was doing", and ``hyp.plot`` reduces that stream to a 3-D path. -Every point on the path is coloured by the **average temperature across all +Every point on the path is colored by the **average temperature across all twenty cities** on a diverging blue-cold / red-hot scale (``palette='RdBu_r'``), so the seasons show up as the path sweeping between the ends of the colormap and the slow warming trend shows up as where the @@ -22,7 +22,7 @@ scale, and ``chemtrails=True`` leaves the traversed path glowing faintly behind the moving head as 138 years play in one two-minute camera orbit. -The colour axis, the colorbar and the trail are all the library's; the +The color axis, the colorbar and the trail are all the library's; the example adds no ``ScalarMappable`` and reaches for nothing private. What it does add is one ``anim.on_frame`` hook that keeps three things in step with the head of the path, every frame: @@ -30,18 +30,18 @@ * a **figure-wide title** naming the month the head is passing through ("March 1954"); * a **world map** (Natural Earth 110 m coastlines, fetched once and cached) - with one dot per city, coloured by *that city's* temperature that month + with one dot per city, colored by *that city's* temperature that month through the *same* colormap and value range as the path's colorbar -- so tropical cities sit at the red end all year while the mid-latitude ones flip between blue and red with the seasons, out of phase across the equator; * a **mean-temperature-vs-time** panel, sharing its left and right edges - with the map: the full 138-year series drawn faintly in grey once, the - months revealed so far growing over it as a line coloured **segment by + with the map: the full 138-year series drawn faintly in gray once, the + months revealed so far growing over it as a line colored **segment by segment by the mean temperature it is drawn at** (same colormap and - range again), and a head marker on the current month coloured like the + range again), and a head marker on the current month colored like the head of the path. The raw monthly mean swings by ~12 \N{DEGREE SIGN}C - every year (the coloured line and the marker bounce with it), so a + every year (the colored line and the marker bounce with it), so a trailing 12-month rolling mean is drawn in plain black over the revealed months to let the warming drift show through the seasons. @@ -89,7 +89,7 @@ MONTHS = ('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December') # map-label nudges (x points, y points, alignment) for the crowded corners -# of the archive's twenty cities; everything else is labelled to the right +# of the archive's twenty cities; everything else is labeled to the right LABEL_OFFSETS = {'Chicago': (-5, 4, 'right'), 'Montreal': (4, 5, 'left'), 'New_York': (4, -9, 'left'), 'Seoul': (-5, 4, 'right'), 'Shanghai': (3, -9, 'left'), 'Tokyo': (4, 3, 'left'), @@ -219,7 +219,7 @@ def construct_artifact(data): mean = data.temps.mean(axis=1) # the hue: raw monthly mean n_months = len(mean) # THE hypertools call: twenty cities as twenty FEATURES of one path, - # coloured by the average temperature across them on a blue-cold / + # colored by the average temperature across them on a blue-cold / # red-hot scale, one camera orbit over the two-minute reveal. Stage # order is the library's: manip -> normalize -> reduce -> animate. # An animated line is resampled onto the frame grid, so the frame rate @@ -244,7 +244,7 @@ def construct_artifact(data): cbar_ax.set_position([0.50, 0.22, 0.014, 0.50]) cbar_ax.yaxis.label.set_fontsize(11) - # The map and the path share ONE colour scale: the colorbar spans the + # The map and the path share ONE color scale: the colorbar spans the # hue's actual range, so the same norm sends each city's own monthly # temperature through the same colormap (extremes saturate). norm = matplotlib.colors.Normalize(mean.min(), mean.max()) @@ -271,9 +271,9 @@ def construct_artifact(data): color='0.25') # Mean temperature over time: the whole raw series once, faintly; then - # the raw months revealed so far, each segment coloured by the value it + # the raw months revealed so far, each segment colored by the value it # ends at, a trailing 12-month mean over them in black, and a marker on - # the current month coloured like the head of the path. The panel takes + # the current month colored like the head of the path. The panel takes # its left/right edges from the map's DRAWN box (equal aspect shrinks # the map inside the box it was given), so the two line up exactly. when = data.years + (data.months - 1) / 12 diff --git a/hypertools/_shared/helpers.py b/hypertools/_shared/helpers.py index 62adb3ae..11808d6c 100644 --- a/hypertools/_shared/helpers.py +++ b/hypertools/_shared/helpers.py @@ -310,7 +310,7 @@ def segment_by_run(x, hue, labels=None): seg_bridge : list of bool ``seg_bridge[i]`` is True when segments i and i+1 are consecutive runs of the SAME input dataset, so a line may be bridged from i into - i+1 (a colour transition within one trajectory); False at dataset + i+1 (a color transition within one trajectory); False at dataset boundaries. Length is ``len(segments) - 1``. Pass the complementary indices to ``patch_lines(breaks=...)``. seg_dataset : list of int @@ -347,7 +347,7 @@ def patch_lines(x, breaks=None, labels=None): """Bridge each group's line to the start of the next group. Extending every group with the first point of the NEXT group makes a - line format render one continuous curve across group (colour) + line format render one continuous curve across group (color) transitions. `breaks` is an optional iterable of group indices that must NOT be bridged INTO from their predecessor -- used to keep a line from crossing a dataset boundary (GH #291), e.g. the run segments produced by @@ -597,7 +597,7 @@ def is_frame_dataset(x): def is_series_like(x): - """True for ONE labelled 1-D vector that is neither an array nor a + """True for ONE labeled 1-D vector that is neither an array nor a DataFrame dataset: a pandas Series (``dw.zoo.array_like`` admits it, ``dw.zoo.is_array`` does not), a polars Series, or any other object exposing ``to_numpy()``. hypertools treats these as a single 1-D diff --git a/hypertools/align/common.py b/hypertools/align/common.py index a8d95ac9..7842d68f 100644 --- a/hypertools/align/common.py +++ b/hypertools/align/common.py @@ -2,7 +2,7 @@ An Aligner wraps a (fitter, transformer, required-params) triple operating on a *list* of DataFrames: `fit` coerces its input (arrays, DataFrames of any -backend datawrangler recognises, or a list of these) into that list, trims to +backend datawrangler recognizes, or a list of these) into that list, trims to common rows and pads to common columns, runs the fitter, and stores the returned dict as attributes; `transform` re-derives the list and runs the transformer with those params, handing each dataset back in its input's form. Child classes @@ -296,7 +296,7 @@ def fit(self, data): data : DataFrame, array, or list (or tuple) of these The dataset(s) to fit the alignment on: numpy arrays, pandas DataFrames, DataFrames of any other backend datawrangler - recognises (polars, ...), or a mix, each one dataset of + recognizes (polars, ...), or a mix, each one dataset of observations x features; a single row-`MultiIndex` DataFrame (``datawrangler.stack`` output) holds one dataset per top-level index value. Rows are matched across datasets by diff --git a/hypertools/core/hierarchy.py b/hypertools/core/hierarchy.py index e4598ccd..20058496 100644 --- a/hypertools/core/hierarchy.py +++ b/hypertools/core/hierarchy.py @@ -55,7 +55,7 @@ def _canonical_label(value): `dropna=False` keeps a group whose hierarchy LABEL is missing, but that group then has to be built and styled as ONE group, and ordinary equality cannot do it: ``NaN != NaN``. Measured on the pandas here, - `np.nan`, `None` and `pd.NA` in a MultiIndex level all normalise to + `np.nan`, `None` and `pd.NA` in a MultiIndex level all normalize to plain `float('nan')`, and `groupby` mints a SEPARATE nan object per group key -- so a dict keyed on raw labels sees two groups where there is one, producing duplicate mean traces, duplicate palette entries and @@ -64,7 +64,7 @@ def _canonical_label(value): `expand_multiindex` avoids it only because `df.index` hands back the same object each time -- neither is something to rely on.) - Every missing spelling canonicalises to the same sentinel, which matches + Every missing spelling canonicalizes to the same sentinel, which matches what the grouping layer already did: pandas had already merged them into one group before these keys were built. @@ -82,7 +82,7 @@ def _canonical_label(value): def _canonical_key(key): - """Canonicalise every level of a hierarchy key tuple (see above).""" + """Canonicalize every level of a hierarchy key tuple (see above).""" return tuple(_canonical_label(value) for value in key) @@ -216,8 +216,8 @@ def _match_features_by_name(leaves, leaf_keys): feature by NAME. Matching by position instead would quietly make column order part of the statistical model: permuting one group's columns would move that group's trajectory and every mean derived from it, even though - the labelled frame holds identical data. Ordering is usually incidental, - so that is not a safe default for a labelled DataFrame. + the labeled frame holds identical data. Ordering is usually incidental, + so that is not a safe default for a labeled DataFrame. Reordering moves whole columns, so each group's values stay attached to their own labels. Callers who genuinely mean "slot i is the same feature diff --git a/hypertools/core/pipeline.py b/hypertools/core/pipeline.py index 6d6253b8..a58abb22 100644 --- a/hypertools/core/pipeline.py +++ b/hypertools/core/pipeline.py @@ -294,7 +294,7 @@ def _validate_input_hierarchy(spec): def as_internal_frames(data): """`data` with every DataFrame dataset in hypertools' internal pandas - form: a frame of any backend datawrangler recognises (polars, a + form: a frame of any backend datawrangler recognizes (polars, a LazyFrame, modin, ...) is converted once here -- pandas frames are returned as-is -- so raw scikit-learn steps and the manipulators, which are written against pandas, never see another backend; a Series (pandas @@ -330,7 +330,7 @@ def _dataset_widths(data): def _width(item): """One dataset's feature count, or `None` if it is not knowable.""" if is_frame_dataset(item): - # a frame of any backend datawrangler recognises (pandas as-is) + # a frame of any backend datawrangler recognizes (pandas as-is) return as_dataframe(item).shape[1] if is_array_dataset(item) and item.ndim == 2: return item.shape[1] @@ -636,7 +636,7 @@ class Pipeline(BaseEstimator): `fit_transform`/`transform` can reproduce that grouping when handed a bare hierarchical frame. `hyp.plot(df, return_model=True)` sets it for a column-`MultiIndex` `df`; nothing else does, so no other - pipeline changes behaviour. Keys: ``'axis'`` (only ``'columns'`` is + pipeline changes behavior. Keys: ``'axis'`` (only ``'columns'`` is defined), ``'n_features'`` (each leaf's width -- what every step was fit on), ``'feature_correspondence'`` (the `group_columns` rule that produced the leaves) and ``'feature_labels'`` (those leaves' @@ -927,7 +927,7 @@ def _regroup_hierarchical_input(self, data): that shape gets fit-time feature-NAME matching. A **list** is taken as already grouped and is passed through unchanged, matched POSITIONALLY -- that is true whether its members are arrays or - labelled DataFrames, because a list is the shape `hyp.plot` itself + labeled DataFrames, because a list is the shape `hyp.plot` itself fits on and its members are the datasets, not something to re-derive groups from. So `pipeline.transform([leaf_a, leaf_b])` never reorders columns by name even if those leaves carry labels; only @@ -949,7 +949,7 @@ def _regroup_hierarchical_input(self, data): # hand on plain arrays, exactly as `hyp.plot` does when it feeds # the pipeline its leaves -- so fit and transform see the same # KIND of input, not merely the same shapes (plot.py: "Hand the - # pipeline plain arrays rather than the labelled leaves"). + # pipeline plain arrays rather than the labeled leaves"). data = [leaf.to_numpy()[:, order] if order is not None else leaf.to_numpy() for leaf in leaves] @@ -963,7 +963,7 @@ def _regroup_hierarchical_input(self, data): "frame with the SAME column hierarchy (its innermost level " f"is the feature axis, so each group must still be {expected}" " features wide), or the equivalent list of per-group " - "arrays. To analyse the flattened frame instead, fit a new " + "arrays. To analyze the flattened frame instead, fit a new " "pipeline on it (df.columns = df.columns.map('_'.join); " "hyp.plot(df, return_model=True)).") return data diff --git a/hypertools/core/shared.py b/hypertools/core/shared.py index 0c2a7673..49abe8dd 100644 --- a/hypertools/core/shared.py +++ b/hypertools/core/shared.py @@ -22,7 +22,7 @@ def as_dataframe(data): """Coerce `data` to a pandas DataFrame (returned as-is if it already - is one; a DataFrame of another backend datawrangler recognises -- + is one; a DataFrame of another backend datawrangler recognizes -- polars DataFrame/LazyFrame, modin, ... -- is converted via ``dw.wrangle(..., backend='pandas')``; a Series (pandas, polars, or anything series-like) becomes ONE column that keeps the Series' index diff --git a/hypertools/impute/backtest.py b/hypertools/impute/backtest.py index 55432451..49fb23e9 100644 --- a/hypertools/impute/backtest.py +++ b/hypertools/impute/backtest.py @@ -37,7 +37,7 @@ def label_flags(x): default ``0..n-1`` index included, since a reordered frame carries those integers with it. A pandas Series labels its rows only (it is one column). Other dataframes (polars) name their columns but have no row - labels. Arrays and everything else are unlabelled. + labels. Arrays and everything else are unlabeled. """ if is_frame_dataset(x): import datawrangler as dw @@ -53,7 +53,7 @@ def data_label_flags(raw, n_datasets): """`label_flags` for each dataset the caller passed to `impute`. `raw` is the caller's ``data`` BEFORE wrangling (wrangling turns every - dataset into a labelled pandas frame, erasing the difference between + dataset into a labeled pandas frame, erasing the difference between an array and a frame). """ if isinstance(raw, (list, tuple)) and len(raw) == n_datasets: @@ -81,7 +81,7 @@ def _align_axis(frame, target, axis, what): if own.equals(target): return frame kind = 'column' if axis else 'row' - hint = (f' Labelled {what} is aligned to the data by label; to compare ' + hint = (f' Labeled {what} is aligned to the data by label; to compare ' 'by position instead, pass it as a bare array ' f'(e.g. {what.split("[")[0]}.to_numpy()).') duplicated = [] @@ -115,13 +115,13 @@ def _as_frame(x, like, what, labelled=(False, False)): """Coerce `truth`/`mask`-shaped input to a DataFrame matching `like`. `labelled` says which axes of the DATA carry labels (`label_flags`). - On an axis where both the data and `x` are labelled, `x` is aligned to + On an axis where both the data and `x` are labeled, `x` is aligned to the data BY LABEL (release red-team 2026-10-09: a truth frame with its columns or rows in another order used to be compared cell-by-position and silently mis-scored). Otherwise the comparison is positional. """ rows, columns = label_flags(x) - if rows and not columns: # a row-labelled Series + if rows and not columns: # a row-labeled Series frame = x.to_frame() elif is_frame_dataset(x): frame = as_pandas_dataframe(x) # any backend datawrangler knows @@ -200,7 +200,7 @@ def score_imputations(datasets, impute_fn, names, specs, truth, mask=None, one-element list); `impute_fn` is the public `impute`, injected to keep this module import-free of the dispatcher. `labelled` is `data_label_flags` of the caller's un-wrangled data (None: treat every - dataset as unlabelled, i.e. compare `truth`/`mask` by position). + dataset as unlabeled, i.e. compare `truth`/`mask` by position). """ metrics = resolve_metrics(metrics) kwargs = dict(kwargs or {}) diff --git a/hypertools/impute/impute.py b/hypertools/impute/impute.py index 2ed4dbb5..413a9e2a 100644 --- a/hypertools/impute/impute.py +++ b/hypertools/impute/impute.py @@ -61,7 +61,7 @@ def _coerce_dataset(d): Types are classified with datawrangler's predicates (see `hypertools._shared.helpers`): a DataFrame of any backend datawrangler - recognises (polars DataFrame/LazyFrame, ...) becomes a pandas + recognizes (polars DataFrame/LazyFrame, ...) becomes a pandas DataFrame, hypertools' internal frame type (a pandas frame passes through untouched); a pandas or polars Series becomes its one-column frame (index and name preserved).""" @@ -408,7 +408,7 @@ def impute(data, model='PPCA', return_model=False, truth=None, mask=None, copy and leaves the caller's instance unchanged. Fitted instances are refused because their learned state may contain the hidden truth. - ALIGNMENT. When `data` and `truth` are both labelled, `truth` is + ALIGNMENT. When `data` and `truth` are both labeled, `truth` is matched to `data` BY LABEL, not by position: a pandas DataFrame labels its rows and columns (a default ``0..n-1`` index counts -- a reordered frame carries those integers with it), a pandas Series @@ -418,7 +418,7 @@ def impute(data, model='PPCA', return_model=False, truth=None, mask=None, sequences are not identical -- raise a `ValueError` naming the axis and the labels. A bare array on either side carries no labels and is compared by position (shape-checked), so pass - ``truth.to_numpy()`` to compare two differently-labelled frames + ``truth.to_numpy()`` to compare two differently-labeled frames cell for cell. With a list of datasets each pair is aligned independently. @@ -426,7 +426,7 @@ def impute(data, model='PPCA', return_model=False, truth=None, mask=None, RESTRICT scoring to a subset of the damaged cells, e.g. only the rows of a simulated occlusion (`mask` is intersected with the NaN mask, so cells that were never missing are excluded either way). - Same shape as `data` (a labelled mask is aligned to `data` by + Same shape as `data` (a labeled mask is aligned to `data` by label exactly as `truth` is); only valid alongside ``truth=``. Score the occluded band and the scattered dropouts separately by calling twice with complementary masks. diff --git a/hypertools/io/load.py b/hypertools/io/load.py index 890ebf34..3c63c174 100644 --- a/hypertools/io/load.py +++ b/hypertools/io/load.py @@ -619,7 +619,7 @@ def load( def _is_loaded_one(dataset): """True for ONE already-loaded dataset: an array, or a DataFrame of - any backend datawrangler recognises (pandas, polars, a LazyFrame, ...). + any backend datawrangler recognizes (pandas, polars, a LazyFrame, ...). Strings and path-likes are never datasets here -- they name something to load -- and are excluded BEFORE the datawrangler predicate is asked (``dw.zoo.is_dataframe`` would otherwise try to read a path).""" @@ -669,7 +669,7 @@ def _reject_kwargs(resolver_label): if dataset in EXAMPLE_DATA.keys(): _reject_kwargs('built-in example dataset') - # *_model -> Pipeline; offline=True is honoured inside + # *_model -> Pipeline; offline=True is honored inside geo_data = _load_example_data(dataset, offline=offline) else: # resolution chain, right after built-in names: scikit-learn's diff --git a/hypertools/io/save.py b/hypertools/io/save.py index 5ee99eaf..27200966 100644 --- a/hypertools/io/save.py +++ b/hypertools/io/save.py @@ -277,7 +277,7 @@ def _write_payload(obj, tmp_name, ext, protocol, target): def _as_array(obj): """``obj`` as a numpy array for the array writers: a DataFrame of any - backend datawrangler recognises (pandas as-is, polars/LazyFrame/... + backend datawrangler recognizes (pandas as-is, polars/LazyFrame/... converted) by its values, anything else by ``np.asarray``.""" if is_frame_dataset(obj): return np.asarray(as_pandas_dataframe(obj)) @@ -287,7 +287,7 @@ def _as_array(obj): def _as_frame(obj, ext, target): """DataFrame view of ``obj`` for the tabular writers, with a clear error when the object has no faithful 2-d tabular form. A frame of any - backend datawrangler recognises is written as a pandas frame (datatype + backend datawrangler recognizes is written as a pandas frame (datatype audit, 2026-09-08).""" if is_frame_dataset(obj): return as_pandas_dataframe(obj) diff --git a/hypertools/io/sources.py b/hypertools/io/sources.py index d4d96d98..7466428a 100644 --- a/hypertools/io/sources.py +++ b/hypertools/io/sources.py @@ -1256,7 +1256,7 @@ def _parse_yahoo_chart(payload, *, ticker, interval='1d', window='', Yahoo stamps every bar at the exchange's local session open expressed in UTC (23:00 UTC for a Sydney-listed ticker, 14:30 UTC for New York), and reports the exchange's UTC offset as ``meta.gmtoffset`` (seconds). - Normalising the raw UTC stamp to midnight dated every bar east of UTC + Normalizing the raw UTC stamp to midnight dated every bar east of UTC one day early (BHP.AX 2025-01-06..10 came back as 2025-01-05..09; 1.1 release review, I2), so the offset is applied first: the resulting ``date`` is the exchange-local trading day. diff --git a/hypertools/io/streaming.py b/hypertools/io/streaming.py index 778e2be6..58a851dd 100644 --- a/hypertools/io/streaming.py +++ b/hypertools/io/streaming.py @@ -88,7 +88,7 @@ def is_stream(x): """True when x is streaming data: a Python iterator/generator, or a Hugging Face ``datasets.IterableDataset``. Materialized data is not a stream: containers (lists, tuples, dicts), strings, and every dataset - type datawrangler recognises -- arrays, DataFrames of any backend + type datawrangler recognizes -- arrays, DataFrames of any backend (pandas, polars DataFrame/LazyFrame, dataframe-likes) and Series.""" if isinstance(x, (list, tuple, dict)) or np.isscalar(x): return False diff --git a/hypertools/manip/common.py b/hypertools/manip/common.py index 10c952b6..7c99b158 100644 --- a/hypertools/manip/common.py +++ b/hypertools/manip/common.py @@ -254,7 +254,7 @@ def stack_for_shared_fit(datasets, name): anyway. Datasets of different widths cannot share statistics and raise. Nothing here touches the datasets themselves, so every frame keeps its own labels and index through the transform (Codex round - 12, R12-3: relabelling the inputs in the dispatcher renamed a named + 12, R12-3: relabeling the inputs in the dispatcher renamed a named frame's features for the independent manipulators too). """ frames = list(datasets) diff --git a/hypertools/manip/manip.py b/hypertools/manip/manip.py index 8ab4cc7a..53c956cf 100644 --- a/hypertools/manip/manip.py +++ b/hypertools/manip/manip.py @@ -76,7 +76,7 @@ def _validate_manip_input(data): # independent manipulators (Smooth, Delay, Resample) never combine # features across datasets, and the shared-statistics ones # (ZScore, Normalize) match columns by position themselves when - # the labels differ (Codex rounds 11 and 12: relabelling here + # the labels differ (Codex rounds 11 and 12: relabeling here # renamed a named frame's features for EVERY model) return [_validate_one(d, no_observations) for d in data] return _validate_one(data, no_observations) diff --git a/hypertools/manip/normalize.py b/hypertools/manip/normalize.py index 167c2834..6c60a19c 100644 --- a/hypertools/manip/normalize.py +++ b/hypertools/manip/normalize.py @@ -37,7 +37,7 @@ def fitter(data, axis=0, min=0, max=1, mode='minmax'): Upper bound of the target range (default: 1). mode : {'minmax', 'isotropic'}, optional `'minmax'` (default) rescales each column (or row) independently; - `'isotropic'` centres on the centroid and divides every column by + `'isotropic'` centers on the centroid and divides every column by one shared scalar (see `Normalize`). Returns @@ -86,7 +86,7 @@ def _fitter(data, axis=0, min=0, max=1, mode='minmax'): data = stack_for_shared_fit(data, 'Normalize') if mode == 'isotropic': - # one shared centre + scale for the whole table (and, for a list, + # one shared center + scale for the whole table (and, for a list, # for every dataset in it): subtract the per-column centroid, then # divide EVERY column by the same scalar -- the largest absolute # deviation from the centroid across all entries. Row-wise fitting @@ -94,7 +94,7 @@ def _fitter(data, axis=0, min=0, max=1, mode='minmax'): # not one point), so refuse it rather than silently ignore `axis`. if axis != 0: raise ValueError( - "Normalize(mode='isotropic') centres and rescales the whole " + "Normalize(mode='isotropic') centers and rescales the whole " 'table with one scalar, so it only supports axis=0; got ' f'axis={axis!r}') baseline = data.mean(axis=0).astype(float) @@ -260,7 +260,7 @@ def inverter(data, **kwargs): class Normalize(Manipulator): """Normalize data into a `[min, max]` range: min-max per column or per - row (default), or isotropically (one shared centre and scale for the + row (default), or isotropically (one shared center and scale for the whole table, preserving its shape). Parameters @@ -279,7 +279,7 @@ class Normalize(Manipulator): feature gets its own offset and scale, so the data's shape is (deliberately) distorted. - ``'isotropic'``: the whole table is centred on its CENTROID (the + ``'isotropic'``: the whole table is centered on its CENTROID (the per-column mean, ``data.mean(axis=0)``) and then every column is divided by the SAME scalar -- the largest absolute deviation from the centroid over all entries, ``abs(data - centroid).max()`` -- @@ -295,9 +295,9 @@ class Normalize(Manipulator): coordinate lies in `[min, max]`, with at least one coordinate touching `min` or `max`. With ``min=-1, max=1`` this is exactly ``(x - x.mean(axis=0)) / abs(x - x.mean(axis=0)).max()`` -- the - "centre and scale a point cloud into the unit cube" recipe. A + "center and scale a point cloud into the unit cube" recipe. A degenerate table (a single point, or all rows identical) is only - centred (its zero deviations are not divided). + centered (its zero deviations are not divided). Notes ----- diff --git a/hypertools/plot/animate.py b/hypertools/plot/animate.py index 19d90b76..d1a4ae32 100644 --- a/hypertools/plot/animate.py +++ b/hypertools/plot/animate.py @@ -252,7 +252,7 @@ def drawn_extent(anim, frames=None, threshold=5): frame indices. threshold : int, optional How far (0-255, per channel) a pixel must differ from the figure's - own background colour to count as drawn. The default 5 treats + own background color to count as drawn. The default 5 treats anything below 250 on a white figure as ink -- faint antialiasing included. diff --git a/hypertools/plot/animation_context.py b/hypertools/plot/animation_context.py index 8f5777d4..a9dee202 100644 --- a/hypertools/plot/animation_context.py +++ b/hypertools/plot/animation_context.py @@ -65,8 +65,8 @@ class FrameContext: are meant to be mutated. BACKEND-NATIVE: on plotly these are that frame's ``go.Scatter``/ ``go.Scatter3d`` traces, in the same order -- except that a - dataset drawn by SEVERAL traces (an animated multicoloured 2-D - line: one trace per colour bin) is one + dataset drawn by SEVERAL traces (an animated multicolored 2-D + line: one trace per color bin) is one `hypertools.plot.plotly_backend.PlotlyTraceGroup`, a tuple of its traces that sets an assigned attribute (``artist.opacity = 0.4``) on every member, so there is still one artist per dataset. @@ -92,7 +92,7 @@ class FrameContext: frame, so ``ctx.artists[0]`` on frame 1 and on frame 2 are the SAME object in different states. Under a CONTINUOUS or matrix ``hue=`` the rendered artists are per-dataset ``LineCollection``/ - ``Line3DCollection`` objects (the single-colour ``Line2D`` heads + ``Line3DCollection`` objects (the single-color ``Line2D`` heads are hidden and only drive the bookkeeping), and those collections are what ``artists`` holds -- so ``set_alpha``/``set_color`` on them changes what is drawn. @@ -106,10 +106,10 @@ class FrameContext: * Where artists are SHARED (matplotlib all styles, plotly spin), anything you set persists until something overwrites it, so - ``if ctx.frame == 0: artist.set_color('red')`` colours the + ``if ctx.frame == 0: artist.set_color('red')`` colors the ENTIRE animation rather than frame 0. * Where they are PER-FRAME (plotly parallel/serial/window/morph), - the same callback colours ONLY frame 0 -- each frame carries an + the same callback colors ONLY frame 0 -- each frame carries an independent trace payload that the callback mutates before it is stored. Measured 2026-07-30: ``fig.frames[0].data[0] is not fig.frames[1].data[0]`` for every one of those four styles. @@ -123,7 +123,7 @@ class FrameContext: artist.set_color('red' if ctx.frame == target else DEFAULT) # correct everywhere -- also assigns on every frame - artist.set_color(COLOURS[ctx.frame]) + artist.set_color(COLORS[ctx.frame]) # BROKEN -- assigns on one frame, leaves the rest to chance if ctx.frame == target: diff --git a/hypertools/plot/colors.py b/hypertools/plot/colors.py index 48bdfad1..381f60f4 100644 --- a/hypertools/plot/colors.py +++ b/hypertools/plot/colors.py @@ -107,10 +107,10 @@ def mat2colors(m, palette='hls', n_bins=100): import seaborn as sns if is_frame_dataset(m): - # any dataframe backend datawrangler recognises (pandas, polars, ...) + # any dataframe backend datawrangler recognizes (pandas, polars, ...) m = as_pandas_dataframe(m).to_numpy() elif is_series_like(m) and not dw.zoo.array_like(m): - # a labelled vector that is not numpy-like itself (a polars Series; + # a labeled vector that is not numpy-like itself (a polars Series; # a pandas Series is `array_like` and read below as it is): its # values m = np.asarray(m) @@ -317,7 +317,7 @@ def continuous_colormap(palette, n_bins=100): #: "is not a valid palette name" error. IMAGE_PALETTE_PREFIX = 'image:' -#: Below this chroma (max(RGB) - min(RGB)) an image has no colour to be +#: Below this chroma (max(RGB) - min(RGB)) an image has no color to be #: salient ABOUT, so `image_palette` orders by population instead. _ACHROMATIC_EPS = 0.02 @@ -410,7 +410,7 @@ def sort_colors(colors, key='value'): def is_palette_matrix(obj): """True for a t x k DATA matrix passed as a palette (`matrix_palette`). - A DataFrame (any backend datawrangler recognises: pandas, polars, ...), + A DataFrame (any backend datawrangler recognizes: pandas, polars, ...), or a 2-D numeric array (or nested list) that cannot be a list of colors: a color list has 3 or 4 columns with every value in [0, 1], and keeps meaning exactly that. Anything else 2-D and numeric -- another column @@ -776,11 +776,11 @@ def image_palette(image, n_colors=IMAGE_PALETTE_N, resize=200, Notes ----- Salience is ``pixel_fraction * chroma``, where - ``chroma = max(r, g, b) - min(r, g, b)`` measures distance from grey. + ``chroma = max(r, g, b) - min(r, g, b)`` measures distance from gray. Ordering by pixel fraction ALONE returns a painting's background -- which is exactly the bug this function exists to avoid. When every - cluster is achromatic (max chroma < 0.02, i.e. a greyscale image) the - ordering falls back to pixel fraction, because a grey image has no + cluster is achromatic (max chroma < 0.02, i.e. a grayscale image) the + ordering falls back to pixel fraction, because a gray image has no vivid color and "largest" is then the right answer. Examples @@ -1311,7 +1311,7 @@ def palette_lead_color(spec): spec = matrix_palette(spec) if isinstance(spec, MatrixColormap): # every matrix palette spans the RGB cube after per-channel scaling, - # so its MIDDLE color is near mid-grey for any matrix and two + # so its MIDDLE color is near mid-gray for any matrix and two # datasets would look alike; the most saturated anchor (chroma = # max - min, first on ties) is the color the matrix is about chroma = spec.anchors.max(axis=1) - spec.anchors.min(axis=1) diff --git a/hypertools/plot/forecast.py b/hypertools/plot/forecast.py index 6c213500..ef8b9a3c 100644 --- a/hypertools/plot/forecast.py +++ b/hypertools/plot/forecast.py @@ -11,11 +11,11 @@ Three spaces, never conflated (see the plan's Contract 2): - ANALYZE space -- `xform` post normalize/reduce/align, pre-resample, - pre-centre/scale. Forecasts are computed HERE, and `t` is + pre-center/scale. Forecasts are computed HERE, and `t` is measured in these RAW samples. - FRAME GRID -- `plot._interp_anim_line` resamples every animated line dataset to exactly `round(frame_rate * duration)` rows. -- DISPLAY box -- the centred/rescaled [-1, 1] cube (`plot.py:4568-4585`). +- DISPLAY box -- the centered/rescaled [-1, 1] cube (`plot.py:4568-4585`). """ import time @@ -69,7 +69,7 @@ #: #: Maintainer decision (1.1.0): a forecast should read as the same series #: projected forward, so it inherits its observed trace's identity -- -#: colour, linestyle AND linewidth -- and differs ONLY in transparency. +#: color, linestyle AND linewidth -- and differs ONLY in transparency. #: This deliberately replaces the pre-1.1.0 rule (always ``linestyle='--'`` #: at a hard-coded ``alpha=0.6`` regardless of how the data was drawn), #: under which a forecast of a dotted, hairline or already-translucent @@ -84,16 +84,16 @@ #: Linestyle per MODEL for a `predict=[...]` collection, cycled in model #: order (matplotlib fmt vocabulary; the plotly backend maps each through #: the same `_resolve_fmt` the observed traces use). A forecast keeps its -#: dataset's COLOUR -- that is what says which series it continues -- so +#: dataset's COLOR -- that is what says which series it continues -- so #: with several models on one series the dash is what says which model #: made it. The first model is solid, exactly like the single-model form, #: so ``predict=['Kalman']`` draws what ``predict='Kalman'`` draws. FORECAST_MODEL_LINESTYLES = ('-', '--', ':', '-.') -#: Colour of a forecast's LEGEND glyph when the forecasts sharing that -#: entry are drawn in more than one colour (one model over several +#: Color of a forecast's LEGEND glyph when the forecasts sharing that +#: entry are drawn in more than one color (one model over several #: datasets): the entry then stands for the model's dash, not for any one -#: dataset's colour, so it is drawn in a neutral dark gray (at the +#: dataset's color, so it is drawn in a neutral dark gray (at the #: forecast's own alpha, so it reads as faded like the forecasts do). FORECAST_LEGEND_COLOR = '#555555' @@ -107,9 +107,9 @@ def override_has_color(override): - """Whether a `resolve_forecast_overrides` dict recolours the forecast: + """Whether a `resolve_forecast_overrides` dict recolors the forecast: a ``'color'`` entry (`forecast_hue=`/`forecast_cluster=`/ - `forecast_palette=`) or a colour letter in its ``'fmt'``.""" + `forecast_palette=`) or a color letter in its ``'fmt'``.""" if not override: return False if override.get('color') is not None: @@ -126,9 +126,9 @@ def override_has_color(override): def forecast_alpha_scale_for(override, alpha_scale=FORECAST_ALPHA_SCALE): """The alpha scale a forecast is drawn with: `alpha_scale` (the - documented halving) when it inherits its trace's colour, and 1.0 -- - the trace's own alpha -- when an override recolours it: the colour is - then what tells the forecast from its trace, and fading a recoloured + documented halving) when it inherits its trace's color, and 1.0 -- + the trace's own alpha -- when an override recolors it: the color is + then what tells the forecast from its trace, and fading a recolored forecast on top of that hid it among translucent traces (1.1 release review, feature-tour 9.10). Both backends call this.""" return 1.0 if override_has_color(override) else alpha_scale @@ -223,7 +223,7 @@ def forecast_from_history(history, model, t, min_history=DEFAULT_MIN_HISTORY, ---------- history : array-like, shape (n_observed, n_dims) The trajectory revealed so far, in ANALYZE space (already reduced, - not yet resampled onto the frame grid and not yet centred/scaled). + not yet resampled onto the frame grid and not yet centered/scaled). model : str or dict Anything `hypertools.predict` accepts ('Kalman', 'ARIMA', 'Laplace', 'GaussianProcess', 'Chronos', ...). @@ -473,7 +473,7 @@ def head_run(self, dataset, frame): class DisplayTransform: - """The centre/scale affine `plot()` applies at `plot.py:4569-4582`. + """The center/scale affine `plot()` applies at `plot.py:4569-4582`. ``2 * (((a - mean) - offset) / scale) - 1``. Recorded at setup so a forecast computed in ANALYZE space can be mapped into the SAME display @@ -778,7 +778,7 @@ def for_regrouped(cls, histories, reveal, model, t, n_frames, The revealed rows come from a `DatasetRevealSchedule` rather than from the drawn traces, because a dataset may now be spread over several of - them. They are passed through as ROW TUPLES, not summarised to counts: + them. They are passed through as ROW TUPLES, not summarized to counts: the reveal is what defines a frame's history, and the cache key must say so. """ @@ -906,7 +906,7 @@ def history_length(self, dataset): def stacked_paths(self): """Every forecast vertex this schedule will ever draw, stacked. - This is what Task 4 folds into the joint centre/scale statistics so + This is what Task 4 folds into the joint center/scale statistics so the display box contains all of it by construction. """ rows = [] @@ -922,7 +922,7 @@ def pin_ramp(self, column, steps): """Replace `column` of every path with an exact arithmetic ramp. `ndims=1` series mode (GH #285) draws each column against its row - INDEX, which it materialises as an extra x column before forecasting + INDEX, which it materializes as an extra x column before forecasting -- so the model also "forecasts" a perfectly regular ramp. Its x values are an extrapolation the PLOT is entitled to decide (the index continues by one observation per step, exactly), not something @@ -1209,7 +1209,7 @@ def trail_alpha(age, n_retained, live_alpha=None, floor=None): # # Resolved HERE, backend-neutrally, into one plain dict per dataset, because # resolving it twice is how the two backends drift apart. Each backend's -# `_forecast_style_from` then translates the same dict into its own colour / +# `_forecast_style_from` then translates the same dict into its own color / # dash / opacity vocabulary. # --------------------------------------------------------------------------- @@ -1230,10 +1230,10 @@ def trail_alpha(age, n_retained, live_alpha=None, floor=None): def _forecast_label_colors(labels, palette): """One RGB tuple per dataset, from `labels` (one per DATASET). - Categorical throughout: two datasets share a colour exactly when they + Categorical throughout: two datasets share a color exactly when they share a label. `mat2colors`' 1-D numeric path is deliberately NOT used -- it BINS values into a gradient, so integer cluster labels 0/1/2 would come - out as three shades of one hue rather than three distinguishable colours. + out as three shades of one hue rather than three distinguishable colors. ``None`` marks an UNLABELED dataset (see `_is_missing_label`): it forms one group drawn in the neutral `colors.NAN_COLOR` gray and consumes no @@ -1261,7 +1261,7 @@ def _validate_fmt(fmt, kwarg='forecast_fmt'): Checked HERE so both backends refuse the same strings at the same moment: left to drawing time, matplotlib raises from inside `_apply_forecast_override` and plotly's `_resolve_fmt` quietly ignores - the characters it does not recognise. + the characters it does not recognize. """ if _process_plot_format is None: # pragma: no cover return @@ -1389,23 +1389,23 @@ def resolve_forecast_overrides(n_datasets, forecasts=None, *, hue=None, and both mismatches otherwise fail silently or misleadingly (a raw ``(t,)`` array would be read as one t-dimensional endpoint). hue : sequence or None - One value per dataset. Datasets sharing a value share a colour. A + One value per dataset. Datasets sharing a value share a color. A missing value (`None`, NaN, `pd.NA`) marks that dataset UNLABELED: every one of them forms a single group drawn in neutral gray and consuming no palette slot, exactly as `plot()` treats a partially-labeled `hue=`. A bare string is rejected rather than read as one label per character, and each value must be hashable -- it - becomes a key in the label -> colour map. + becomes a key in the label -> color map. cluster : cluster spec or None Clusters the forecast ENDPOINTS -- where each series is predicted to - end up -- so a forecast's colour answers "which of these are heading + end up -- so a forecast's color answers "which of these are heading to the same place?". It deliberately does NOT recluster the observed data: inheriting the observed assignment is what the default already gives, so that reading would make the kwarg a no-op. Nor does it cluster every - predicted POINT (one forecast would change colour along its own short - path, contradicting "coloured by where it is heading"), nor whole + predicted POINT (one forecast would change color along its own short + path, contradicting "colored by where it is heading"), nor whole flattened trajectories (sensitive to `t`, to sampling and to dimensionality, where an endpoint has one stable meaning). @@ -1420,15 +1420,15 @@ def resolve_forecast_overrides(n_datasets, forecasts=None, *, hue=None, sets, and there is no reason a good number of groups for one is a good number for the other. palette : str, list of colors, matplotlib Colormap, or None - Colours for the grouping. With no grouping given, spent one colour - per dataset. `None` means "no colour override" -- callers pass the + Colors for the grouping. With no grouping given, spent one color + per dataset. `None` means "no color override" -- callers pass the figure's own `palette=` when they want the observed one inherited. default_palette : callable or None - The grouping's colours when `palette` is None: called with the - number of groups, it returns that many colours. `plot()` passes + The grouping's colors when `palette` is None: called with the + number of groups, it returns that many colors. `plot()` passes `_forecast_group_palette`, which continues the figure's palette - past the observed data's colours so no group repeats one. None - keeps 'hls' from its first colour. + past the observed data's colors so no group repeats one. None + keeps 'hls' from its first color. fmt : str, sequence of str, or None Line/marker style for the forecasts, independent of the observed `fmt`. Validated here with matplotlib's own `fmt=` parser, so both @@ -1447,7 +1447,7 @@ def resolve_forecast_overrides(n_datasets, forecasts=None, *, hue=None, if hue is not None and cluster is not None: raise ValueError( "forecast_hue= and forecast_cluster= both decide how the " - "forecasts are grouped and coloured, so passing both would mean " + "forecasts are grouped and colored, so passing both would mean " "silently picking a winner. Pass one (this mirrors hue= and " "cluster= for the observed data).") if n_clusters is not None and cluster is None: @@ -1472,14 +1472,14 @@ def resolve_forecast_overrides(n_datasets, forecasts=None, *, hue=None, labels = list(hue) # a per-observation hue (the shape `hue=` takes) reaches here as a # list of ARRAYS, and grouping by `==` on those raises numpy's - # "truth value of an array is ambiguous" from deep inside the colour + # "truth value of an array is ambiguous" from deep inside the color # code. Say what was actually wrong instead. if any(isinstance(v, (list, tuple, np.ndarray)) for v in labels): raise ValueError( "forecast_hue= takes one SCALAR value per dataset (a " "forecast is a single trace, so there is no per-observation " "hue to take); got a sequence as one of its values. Pass " - "hue= to colour the observed data per observation.") + "hue= to color the observed data per observation.") if len(labels) != n_datasets: raise ValueError( f"forecast_hue= must have exactly one value per FORECAST (a " @@ -1492,9 +1492,9 @@ def resolve_forecast_overrides(n_datasets, forecasts=None, *, hue=None, # normalization `plot()` applies to a categorical `hue=`) from .colors import is_missing_label labels = [None if is_missing_label(v) else v for v in labels] - # labels become the KEYS of a label -> colour map, so an unhashable + # labels become the KEYS of a label -> color map, so an unhashable # one (a dict, a set) passes the sequence guard above and then fails - # as a bare "unhashable type" from inside the colour code + # as a bare "unhashable type" from inside the color code # `hash(v)` rather than `isinstance(v, Hashable)`: the ABC only asks # whether `__hash__` EXISTS, and a tuple holding a list has one that # raises when called. @@ -1507,7 +1507,7 @@ def resolve_forecast_overrides(n_datasets, forecasts=None, *, hue=None, raise TypeError( f"every forecast_hue= value must be usable as a group " f"label, which means hashable (datasets sharing a value " - f"share a colour); got {v!r} " + f"share a color); got {v!r} " f"({type(v).__name__}).") from exc elif cluster is not None: # `plot()` passes `len(raw_forecasts)` as `n_datasets`, so it cannot @@ -1555,7 +1555,7 @@ def resolve_forecast_overrides(n_datasets, forecasts=None, *, hue=None, labels, 'hls' if palette is None else palette)): overrides[i]['color'] = color elif palette is not None: - # nothing to group BY, so the palette is spent one colour per + # nothing to group BY, so the palette is spent one color per # dataset -- the only grouping a forecast set has on its own for i, color in enumerate(_forecast_label_colors( list(range(n_datasets)), palette)): diff --git a/hypertools/plot/hierarchy.py b/hypertools/plot/hierarchy.py index c43dde28..822f6d6f 100644 --- a/hypertools/plot/hierarchy.py +++ b/hypertools/plot/hierarchy.py @@ -109,7 +109,7 @@ def build_hierarchy_traces(leaf_arrays, meta, aux=None): this chain mutates its inputs -- and a blanket copy would double peak memory for no gain against it. (Incidentally, on the pandas installed here copy-on-write makes `np.asarray(df)` a non-writeable view, so a - stray write raises; that is version-specific behaviour, not a guarantee. + stray write raises; that is version-specific behavior, not a guarantee. Any future code that needs to WRITE into an `arrays` member must copy at that point and say why.) @@ -237,7 +237,7 @@ def build_hierarchy_styles(traces, palette='hls', linestyle=None, carries a legend label. When ``meta['n_levels'] == 1`` there IS no mean: each leaf is itself a top-level group, so each carries its own label. Without this, a two-level (Group, Feature) column hierarchy drew several - completely unlabelled traces and an empty legend (F11). + completely unlabeled traces and an empty legend (F11). Parameters ---------- @@ -257,7 +257,7 @@ def build_hierarchy_styles(traces, palette='hls', linestyle=None, A caller-supplied replacement for the legend text, ONE entry per unique top-level index value in ``unique_top`` order (the same per-top-level-group convention `linestyles` already uses). Only the - labelled traces are affected -- everything else keeps + labeled traces are affected -- everything else keeps ``'_nolegend_'`` -- so the legend still has exactly ``n_top`` entries. ``None`` (the default) keeps the index values themselves. Raises ``ValueError`` on a length mismatch, naming ``legend=`` @@ -269,14 +269,14 @@ def build_hierarchy_styles(traces, palette='hls', linestyle=None, ``{'colors', 'linewidths', 'alphas', 'labels', 'group_labels', 'linestyles', 'n_top', 'unique_top'}``, one entry per trace (aligned by position). ``group_labels`` is every trace's top-level group - label (the legend text of the group it is coloured as, never the + label (the legend text of the group it is colored as, never the ``'_nolegend_'`` sentinel) -- the plotly backend's hover name. """ n_levels = traces.meta['n_levels'] # Top-level uniqueness is NA-aware for the same reason prefix grouping # is: two leaves whose top label is missing are ONE group, and must get - # one colour and one legend entry rather than one each. `unique_top` + # one color and one legend entry rather than one each. `unique_top` # keeps the ORIGINAL value -- the sentinel is never user-visible. unique_top = [] top_index_of = {} @@ -310,7 +310,7 @@ def build_hierarchy_styles(traces, palette='hls', linestyle=None, # legend=[...] under a hierarchy renames the top-level GROUPS, so it is # sized like `linestyles` (one entry per unique top-level value), not # like the drawn-trace count a flat `legend=` list uses -- the leaves - # and the intermediate means are unlabelled by the rule below, so a + # and the intermediate means are unlabeled by the rule below, so a # per-trace list would be mostly sentinel padding the caller cannot see # the need for. Checked here, where `n_top`/`unique_top` are known. per_top_label = None @@ -328,7 +328,7 @@ def build_hierarchy_styles(traces, palette='hls', linestyle=None, colors, linewidths, alphas, labels = [], [], [], [] # every trace's TOP-level group label (never the sentinel): what the - # legend entry it shares a colour with says -- the plotly backend's + # legend entry it shares a color with says -- the plotly backend's # hover name for leaves and intermediate means, which carry no legend # label of their own group_labels = [] @@ -343,7 +343,7 @@ def build_hierarchy_styles(traces, palette='hls', linestyle=None, # Only the TOP-level mean carries a legend label -- except when # n_levels == 1, where there IS no mean and each leaf is itself a # top-level group. Without that exception a (Group, Feature) column - # hierarchy drew several completely unlabelled traces (F11). + # hierarchy drew several completely unlabeled traces (F11). top_level = (level == 0) and (mean or n_levels == 1) group_labels.append(str(top_val) if per_top_label is None else str(per_top_label[top_i])) diff --git a/hypertools/plot/hyper_animation.py b/hypertools/plot/hyper_animation.py index b19cd88a..1bca738e 100644 --- a/hypertools/plot/hyper_animation.py +++ b/hypertools/plot/hyper_animation.py @@ -53,10 +53,10 @@ class HyperAnimation(tuple): only -- see ``hyp.plot``'s ``on_frame=`` docstring for the backend-portable form and the ``FrameContext`` it receives). - ``.colors`` holds the resolved colour scale of the plot that produced + ``.colors`` holds the resolved color scale of the plot that produced the animation (the same dict ``return_model=True`` puts in ``bundle['colors']``: kind, palette, cmap, norm, vmin, vmax, the - per-group colours and their labels), so a companion panel can reuse the + per-group colors and their labels), so a companion panel can reuse the library's mapping. ``.drawn_extent(frames=None)`` measures the union bounding box of everything the animation draws. """ @@ -151,9 +151,9 @@ def drawn_extent(self, frames=None, threshold=5): iterable of frame indices measures exactly those. threshold : int, optional How far (0-255, per channel) a pixel must differ from the - figure's own background colour to count as drawn. The default + figure's own background color to count as drawn. The default 5 treats anything below 250 on a white figure as ink, faint - antialiasing included; raise it to ignore light artefacts. + antialiasing included; raise it to ignore light artifacts. Returns ------- diff --git a/hypertools/plot/matplotlib_backend.py b/hypertools/plot/matplotlib_backend.py index 59d4804d..17837abb 100644 --- a/hypertools/plot/matplotlib_backend.py +++ b/hypertools/plot/matplotlib_backend.py @@ -62,9 +62,9 @@ def _label_callout_kwargs(label_alpha, arrowstyle='-', facecolor='white'): """`ax.annotate` box and connector styling for an observation label, - in the colours plotly's annotations use (`plotly_backend`: connector + in the colors plotly's annotations use (`plotly_backend`: connector rgba(0,0,0,0.6), box edge rgba(0,0,0,0.4), a white box at - `label_alpha`). Both colours are EXPLICIT: seaborn's whitegrid style + `label_alpha`). Both colors are EXPLICIT: seaborn's whitegrid style sets ``patch.edgecolor='w'``, so the defaults drew a white connector and a white box edge -- an invisible link that cut white notches through the markers (1.1 release review, figure QA). `label_alpha` stays @@ -140,7 +140,7 @@ def _apply_title(ax, text, font=None, title_kwargs=None, family=None): #: that is left for the panel's own ticks and label). COMPANION_GAP = 0.02 -#: The full, unrevealed series is drawn once underneath in this grey, so the +#: The full, unrevealed series is drawn once underneath in this gray, so the #: revealed part reads against the shape it is filling in. COMPANION_GHOST_COLOR = '0.85' @@ -171,7 +171,7 @@ def _grow_for_companion(fig, spec): Growing rather than shrinking is the same decision (and the same reasoning) as `plot._reserve_animated_3d_title_margin`: an animated 3-D - axes is deliberately maximised to the full canvas so a rotating zoomed + axes is deliberately maximized to the full canvas so a rotating zoomed cube never clips, and shrinking it to make room would shrink the rendered cube with it. """ @@ -220,12 +220,12 @@ def add_companion_panel(fig, spec, cmap=None, norm=None, font=None, updater needs (GH #285). The panel shows the whole series once, faintly, then reveals it: a line - (or, with ``hue=``, a `LineCollection` coloured through the plot's own - colour scale) up to the reveal head, an optional trailing rolling mean, + (or, with ``hue=``, a `LineCollection` colored through the plot's own + color scale) up to the reveal head, an optional trailing rolling mean, and an optional marker on the head itself. The line and head marker are drawn in ``spec['color']``, else in - `default_color` -- `plot()` passes the colour of the trajectory the + `default_color` -- `plot()` passes the color of the trajectory the panel accompanies -- else in matplotlib's ``'C0'`` (only a direct caller that passes neither reaches that last fallback; 1.1 visual review L12). @@ -241,7 +241,7 @@ def add_companion_panel(fig, spec, cmap=None, norm=None, font=None, points = np.column_stack([x, y]) segments = np.stack([points[:-1], points[1:]], axis=1) if spec['hue'] is not None: - # the PLOT's own resolved colour scale when there is one (a + # the PLOT's own resolved color scale when there is one (a # continuous `hue=` gives `colorbar_info` a cmap and a norm), so the # panel and the trajectory it accompanies read the same value the # same way; otherwise a plain linear scale over the panel's own @@ -378,7 +378,7 @@ def legend_call_kwargs(is_3d=False, zlabel=None, font=None, """The `ax.legend(...)` keyword arguments hypertools draws a legend with. Factored out of `_draw` (GH #285) so `plot()` can REBUILD the legend - with identical placement/styling after it adds a labelled overlay + with identical placement/styling after it adds a labeled overlay (a multi-model `predict=` fan, or `truth=`) -- the legend is built inside `_draw`, before those artists exist, and a rebuild that guessed at the placement would move the legend on exactly the figures that @@ -417,7 +417,7 @@ def legend_call_kwargs(is_3d=False, zlabel=None, font=None, def _recolor_legend_handles(legend, colors): - """Apply `legend_colors=`'s plain colour list to an already-built + """Apply `legend_colors=`'s plain color list to an already-built legend, in entry order (GH #285).""" handles = legend.legend_handles if len(colors) != len(handles): @@ -909,16 +909,16 @@ def _draw( not correspond to input datasets (marker-only categorical regrouping groups globally by category), and those keep `anim_window_bounds` directly. - `axis_scale` (GH #285): ``'unit'`` (the historical behaviour) draws the + `axis_scale` (GH #285): ``'unit'`` (the historical behavior) draws the hypertools frame square (half-width `UNIT_FRAME_SCALE`) and pins the 2-D axes to ``+-UNIT_FRAME_LIMIT`` -- - `plot()` has already mean-centred and rescaled the data into ``[-1, 1]`` + `plot()` has already mean-centered and rescaled the data into ``[-1, 1]`` for it. ``'data'`` draws NO frame square, leaves matplotlib's own ticks and spines visible, and takes its limits from `xlim`/`ylim` (which `plot()` computes from the full data, forecasts included, so an animation's viewport never jumps) or from matplotlib's autoscale when both are None. 3-D is always ``'unit'`` (`plot()` refuses the other). - `xlim`/`ylim` (GH #285): explicit ``(low, high)`` axis limits, honoured + `xlim`/`ylim` (GH #285): explicit ``(low, high)`` axis limits, honored on every non-``'unit'`` 2-D/1-D path (static and animated). ``None`` leaves the axis alone. @@ -1555,7 +1555,7 @@ def annotate_plot_explore(X, index, labels=False): ) _explore_font_kwargs = {} if font is None else dict(fontproperties=font) - # put the label on the side of the point facing the axes centre, so a + # put the label on the side of the point facing the axes center, so a # point near an edge never pushes its label out of the window fx, fy = ax.transAxes.inverted().transform( ax.transData.transform((x2, y2))) @@ -3313,7 +3313,7 @@ def _trail_kwargs(kw): # gridlines seaborn's 'whitegrid' style (applied by `plot()`) puts on # hypertools' own axes are removed, matching the plotly backend's # `showgrid=False` (1.1 release review: the matplotlib data-scale plot - # drew a grey grid the plotly one never had). A caller's `ax=` keeps + # drew a gray grid the plotly one never had). A caller's `ax=` keeps # whatever grid its owner gave it. # the font stack in force NOW (`plot()` draws inside the rc_context # that sets it), given explicitly to the axis labels and title below: diff --git a/hypertools/plot/meshutil.py b/hypertools/plot/meshutil.py index 860233cb..727d361a 100644 --- a/hypertools/plot/meshutil.py +++ b/hypertools/plot/meshutil.py @@ -861,7 +861,7 @@ def vertex_colors_from_points(verts, points, point_colors, power=2.0, eps=1e-9, The blend is LOCAL on purpose: over ALL points, ``1/d**2`` weights in 3-D let the many distant points outweigh the few near ones (each shell of radius ``r`` holds ~``r**2`` points), so every vertex drifted toward - the dataset's mean colour -- washed out and locally wrong under a + the dataset's mean color -- washed out and locally wrong under a ``hue=`` gradient (maintainer report, 2026-09-11). Parameters diff --git a/hypertools/plot/morph.py b/hypertools/plot/morph.py index 52d8cbce..7c721e69 100644 --- a/hypertools/plot/morph.py +++ b/hypertools/plot/morph.py @@ -381,7 +381,7 @@ def transition_t(step, n_steps): `n_steps`): ``smoothstep((step + 1) / (n_steps + 1))``. Always strictly inside ``(0, 1)``: the ENDPOINTS of a transition are the - two hold clouds, which the neighbouring HOLD segments already draw, so a + two hold clouds, which the neighboring HOLD segments already draw, so a transition frame that sampled them would only repeat a hold. The samples are the ``n_steps`` interior points of an ``n_steps + 1``-way split, which keeps them symmetric about the midpoint and evenly spaced diff --git a/hypertools/plot/multiindex.py b/hypertools/plot/multiindex.py index 2abb517b..e2c5c08d 100644 --- a/hypertools/plot/multiindex.py +++ b/hypertools/plot/multiindex.py @@ -41,7 +41,7 @@ Example (``n_levels == 1``, reachable from a two-level COLUMN hierarchy such as (Group, Feature), where the innermost level is the feature axis): there is no non-leaf level, so NO mean is built and every leaf is itself a top-level -group -- lw=1, alpha=1.0, its own colour, and **its own legend label**. +group -- lw=1, alpha=1.0, its own color, and **its own legend label**. Applying the general rule here would leave every trace ``'_nolegend_'`` and the legend empty, which is what it did before 1.1 (F11). diff --git a/hypertools/plot/ownership.py b/hypertools/plot/ownership.py index 71b23d60..f224948d 100644 --- a/hypertools/plot/ownership.py +++ b/hypertools/plot/ownership.py @@ -12,7 +12,7 @@ sliced from, and * the source parameters a run DRAWS (`draw_span`), which is one longer for a bridged run because `patch_lines` appends the next run's first observation - so the polyline is continuous across a colour change. + so the polyline is continuous across a color change. Using the owned span to pace the drawn geometry mis-times every category boundary by one vertex, and leaves an observation on screen that the reveal @@ -106,7 +106,7 @@ def from_segments(cls, seg_dataset, seg_lengths, seg_bridge): `patch_lines` appends the NEXT run's first point to every bridged run, so a drawn run's array is one row longer than the span it owns. Passing post-bridge lengths here would hand every bridged run one row - of its neighbour's data -- exactly the double-counting that makes a + of its neighbor's data -- exactly the double-counting that makes a forecast history wrong by one observation per category boundary. Pass `seg_bridge` straight through from `segment_by_run` rather than re-deriving it from run positions: `plot._regroup_categorical_lines` diff --git a/hypertools/plot/plot.py b/hypertools/plot/plot.py index 0aee2c65..daa558f5 100644 --- a/hypertools/plot/plot.py +++ b/hypertools/plot/plot.py @@ -243,7 +243,7 @@ def _seaborn_palette_arg(palette, n_colors): - a PER-DATASET list of palettes (``palette=['image:wave.jpg', 'viridis', ...]``, see `colors.dataset_palettes`) resolves to each - palette's `palette_lead_color`, one colour per dataset -- which is + palette's `palette_lead_color`, one color per dataset -- which is exactly what this cycling palette is for. - a ``{category: color}`` DICT names CATEGORIES, and the groups these call sites cycle over are datasets, not categories. The ambient cycle @@ -253,8 +253,8 @@ def _seaborn_palette_arg(palette, n_colors): (`_categorical_color_label_maps`, the partially-labeled hue branch, the marker regroup, and the discrete colorbar) resolves the dict by NAME through `colors.resolve_category_colors` and sets explicit - colours. A dict with NO categorical hue at all is rejected outright - -- by `colors._get_palette`, when the figure's colour scale is + colors. A dict with NO categorical hue at all is rejected outright + -- by `colors._get_palette`, when the figure's color scale is resolved -- rather than silently drawing in the default palette.""" import collections.abc @@ -263,7 +263,7 @@ def _seaborn_palette_arg(palette, n_colors): from .colors import DEFAULT_PALETTE, IMAGE_PALETTE_PREFIX if (isinstance(palette, (list, tuple, np.ndarray)) and len(palette) == 0): - # seaborn cycles a colour list with `itertools.cycle`, so an EMPTY + # seaborn cycles a color list with `itertools.cycle`, so an EMPTY # list escaped as a bare StopIteration from inside # `sns.color_palette`; say what the no-hue path already says. raise ValueError("palette= was given as an empty list; supply at " @@ -280,9 +280,9 @@ def _seaborn_palette_arg(palette, n_colors): n_colors)] _specs = dataset_palettes(palette, n_colors) if _specs is not None: - # a {category: color} dict ENTRY has no lead colour (it names + # a {category: color} dict ENTRY has no lead color (it names # categories, like a whole-plot dict); the ambient cycle gets the - # default palette's colour at that position, and the categorical + # default palette's color at that position, and the categorical # paths resolve the dicts by name (`_categorical_color_label_maps` # merges a per-dataset list of dicts into one mapping). _default = None @@ -313,45 +313,45 @@ def _fmt_draws_line(fmt): def _fmt_color_letter(fmt): - """The colour a matplotlib format string names (``'r-'`` -> ``'r'``), + """The color a matplotlib format string names (``'r-'`` -> ``'r'``), or None when it names none, is not a string, or does not parse. The plot.py twin of `plotly_backend._fmt_color_letter`: the plotly backend - has no colour cycle, so the palette is handed to it as explicit - per-dataset ``color=`` entries, and this is how a colour letter in + has no color cycle, so the palette is handed to it as explicit + per-dataset ``color=`` entries, and this is how a color letter in ``fmt=`` keeps its matplotlib precedence over that palette (1.1 release - review, round 6: ``fmt='r-'`` drew the palette colour on plotly).""" + review, round 6: ``fmt='r-'`` drew the palette color on plotly).""" if not isinstance(fmt, str) or not fmt or _process_plot_format is None: return None try: return _process_plot_format(fmt)[2] - except Exception: # noqa: BLE001 - an unparseable fmt names no colour + except Exception: # noqa: BLE001 - an unparseable fmt names no color return None def _palette_slots_consumed(n_drawn, mpl_kwargs, line_colors, draw_fmt, category_colored=False): - """How many colour-cycle slots one call's `n_drawn` drawn datasets take + """How many color-cycle slots one call's `n_drawn` drawn datasets take up: what a later ``ax=`` call into the same axes, figure or grid cell continues the palette from, on BOTH backends. - Only a dataset coloured FROM the cycle consumes a slot. An explicit + Only a dataset colored FROM the cycle consumes a slot. An explicit ``color=`` (or a palette mapping resolved into one), a ``hue=`` - colouring, and a colour letter in ``fmt=`` (``'r-'``) colour their + coloring, and a color letter in ``fmt=`` (``'r-'``) color their datasets without touching the cycle -- exactly as a matplotlib axes treats them -- so ``hyp.plot(a, fmt='r-')`` followed by - ``hyp.plot(b, ax=...)`` gives ``b`` the FIRST palette colour, the one + ``hyp.plot(b, ax=...)`` gives ``b`` the FIRST palette color, the one the single call ``fmt=['r-', '-']`` gives it (1.1 release review, round 7: the count was every drawn dataset, so that second call drew the - SECOND palette colour on plotly, and in an initially empty + SECOND palette color on plotly, and in an initially empty `hyp.subplots` cell on both backends). `category_colored` says so EXPLICITLY when a ``hue=``/``cluster=`` - grouping coloured the drawn groups by category: such a call consumes + grouping colored the drawn groups by category: such a call consumes no slot whatever its fmt. Inferring that from the resolved kwargs alone missed the marker-only categorical grouping (``hue=..., fmt='o'``), whose groups used to be drawn straight from the ambient cycle -- so ordinary -> ``hue=`` with ``fmt='o'`` -> ordinary ended on - the THIRD palette colour instead of the second (round 9).""" + the THIRD palette color instead of the second (round 9).""" if category_colored or "color" in mpl_kwargs or line_colors is not None: return 0 return sum( @@ -361,35 +361,35 @@ def _palette_slots_consumed(n_drawn, mpl_kwargs, line_colors, draw_fmt, def _palette_continuation(palette, n, offset=0, used=None): - """The `n` colours a call draws from `palette` into an axes, figure or + """The `n` colors a call draws from `palette` into an axes, figure or grid cell where earlier hypertools calls already took `offset` slots -- - `used` being those slots' colours, in order (None when unknown). + `used` being those slots' colors, in order (None when unknown). - With no earlier slots this is the palette's own `n`-colour sampling, + With no earlier slots this is the palette's own `n`-color sampling, exactly what a fresh call draws. With earlier slots the palette is CONTINUED, never restarted and never repeated: - - a fixed-sequence palette (a colour list, 'deep', 'Set2', ...) gives - the next colours in its sequence -- the `offset`-th onward of its + - a fixed-sequence palette (a color list, 'deep', 'Set2', ...) gives + the next colors in its sequence -- the `offset`-th onward of its ``offset + n`` sampling, what one call with every dataset would draw; - an evenly RE-SAMPLED palette ('hls', 'husl', a colormap such as - 'viridis') places its colours by count, so the ``offset + n`` + 'viridis') places its colors by count, so the ``offset + n`` sampling is not an extension of the ``offset`` one: 'hls' at 2 is 0 and 180 degrees, at 4 it is 0/90/180/270, so taking its last two repeated 180 (1.1 release review: two datasets then two more drew a2 == b1). Instead take the smallest sampling of ``m >= offset + n`` - colours that CONTAINS every colour already used and fill its free - slots in palette order -- 'hls' 2 + 2 draws exactly the 4-colour + colors that CONTAINS every color already used and fill its free + slots in palette order -- 'hls' 2 + 2 draws exactly the 4-color 'hls' set, and 1 + 1 still draws what one call with both draws. - When no such sampling exists (the earlier colours came from another - palette, or a short colour list has no free slot left to fill), it + When no such sampling exists (the earlier colors came from another + palette, or a short color list has no free slot left to fill), it falls back to the ``offset``-th onward of the ``offset + n`` sampling. """ import seaborn as sns def sample(m): - """The palette's own `m`-colour sampling, as RGB tuples.""" + """The palette's own `m`-color sampling, as RGB tuples.""" return [tuple(float(v) for v in c[:3]) for c in sns.color_palette( _seaborn_palette_arg(palette, m), m)] @@ -403,7 +403,7 @@ def sample(m): used_arr = np.asarray([tuple(c)[:3] for c in used], dtype=float) # every sampling that could hold `used` plus `n` free slots; the upper # bound covers the nested refinements repeated composition produces - # (each at most doubles the grid the used colours sit on) + # (each at most doubles the grid the used colors sit on) for m in range(offset + n, 4 * (offset + n) + 9): cand = np.asarray(sample(m), dtype=float) dist = np.abs(cand[:, None, :] - used_arr[None, :, :]).max(axis=-1) @@ -418,13 +418,13 @@ def sample(m): def _observed_palette_colors(palette, n_drawn, color=None, draw_fmt=None, prior=None): - """The distinct colours the OBSERVED data takes, in order -- what a + """The distinct colors the OBSERVED data takes, in order -- what a default forecast grouping continues the palette past (`_forecast_group_palette`). - `color` is the resolved per-trace ``color=`` (an explicit colour, or the - per-run colours a categorical ``hue=``/``cluster=`` assigned); without - it each dataset lacking a colour letter in `draw_fmt` takes the next + `color` is the resolved per-trace ``color=`` (an explicit color, or the + per-run colors a categorical ``hue=``/``cluster=`` assigned); without + it each dataset lacking a color letter in `draw_fmt` takes the next palette slot. `prior` is ``(offset, used)`` for slots earlier calls took on a reused axes/figure/cell. The unlabeled-group gray is not a palette slot and is left out.""" @@ -456,7 +456,7 @@ def _add(c): or _looks_like_dataset_palettes(palette)): return out # the cycle is sampled for EVERY drawn dataset and the unlettered ones - # take its first colours in order -- exactly how both backends colour + # take its first colors in order -- exactly how both backends color # them (a lettered dataset skips a slot without changing the sampling) for c in _palette_continuation(palette, n_drawn, offset, used if offset else None)[:n_slots]: @@ -465,7 +465,7 @@ def _add(c): def _prior_palette_slots(ax, plotly_into, backend): - """``(offset, used)``: the palette slots (and their colours, or None) + """``(offset, used)``: the palette slots (and their colors, or None) earlier hypertools calls took on the axes / plotly figure / grid cell this call draws into -- read from the same records the observed palette continuation reads (``ax._hyp_palette_offset``/``_used``; @@ -497,12 +497,12 @@ def _prior_palette_slots(ax, plotly_into, backend): def _forecast_group_palette(palette, observed): - """The DEFAULT colours of a `forecast_hue=`/`forecast_cluster=` grouping + """The DEFAULT colors of a `forecast_hue=`/`forecast_cluster=` grouping (no `forecast_palette=`), as a function of the group count: the - figure's palette CONTINUED past the `observed` colours + figure's palette CONTINUED past the `observed` colors (`_observed_palette_colors`), so no forecast group wears an observed - line's colour (maintainer decision, 1.1 review -- cluster 0 used to be - dataset 0's colour exactly). A per-dataset or mapping palette has no + line's color (maintainer decision, 1.1 review -- cluster 0 used to be + dataset 0's color exactly). A per-dataset or mapping palette has no sequence to continue, so 'hls' is continued past the observed count.""" if (palette is None or isinstance(palette, collections.abc.Mapping) or _looks_like_dataset_palettes(palette)): @@ -515,9 +515,9 @@ def _colors(n): def _extend_palette_used(offset, used, taken): - """The palette-slot colours an axes/figure/cell holds after a call that - took `taken` past `offset` earlier slots whose colours were `used`, or - None when the earlier colours are unknown (then the next call falls back + """The palette-slot colors an axes/figure/cell holds after a call that + took `taken` past `offset` earlier slots whose colors were `used`, or + None when the earlier colors are unknown (then the next call falls back to the count alone; see `_palette_continuation`).""" if offset <= 0: return [tuple(float(v) for v in c[:3]) for c in taken] @@ -528,7 +528,7 @@ def _extend_palette_used(offset, used, taken): def _record_palette_used(fig, into, offset, used, taken): - """Record the palette-slot colours on a plotly figure's ``layout.meta``, + """Record the palette-slot colors on a plotly figure's ``layout.meta``, beside the slot count the plotly backend records there: per figure as ``'hyp_palette_used'``, per `PlotlyCell` as ``'hyp_cell_palette_used'[str(index)]``.""" @@ -574,11 +574,11 @@ def _rank_plotly_legend(fig, first_trace, order): def _sync_color_scales(drawn, *infos): - """Rewrite each discrete colour scale in `infos` (the return_model + """Rewrite each discrete color scale in `infos` (the return_model bundle's ``'colors'``, a discrete colorbar's info) in place to the - per-dataset colours `drawn` -- the colours the datasets were actually - drawn in -- when it has one colour per dataset. Only for datasets - coloured from the palette cycle (see `_color_scales_from_cycle` in + per-dataset colors `drawn` -- the colors the datasets were actually + drawn in -- when it has one color per dataset. Only for datasets + colored from the palette cycle (see `_color_scales_from_cycle` in `plot`), whose scale was resolved from the palette's fresh sampling.""" from matplotlib.colors import BoundaryNorm, ListedColormap, to_rgb rgb = np.asarray([to_rgb(c) for c in drawn], dtype=float) @@ -604,10 +604,10 @@ def _apply_forecast_override(style, override): Sparse by design (see `forecast.resolve_forecast_overrides`): only the aspects the user actually named are replaced, so `forecast_fmt=':'` - leaves the inherited colour alone and `forecast_palette=` leaves the + leaves the inherited color alone and `forecast_palette=` leaves the inherited dash alone. - An explicit override colour beats a colour letter inside `forecast_fmt=` + An explicit override color beats a color letter inside `forecast_fmt=` (``forecast_fmt='r--'`` with `forecast_hue=`), matching matplotlib's own rule that a `color=` kwarg wins over a fmt string. """ @@ -634,7 +634,7 @@ def _forecast_style_from(src_line, alpha_scale=FORECAST_ALPHA_SCALE, """Style a forecast to match the observed trace it continues. A forecast is the SAME series projected forward, so it inherits its - observed trace's identity -- colour, linestyle and linewidth -- and + observed trace's identity -- color, linestyle and linewidth -- and differs only in transparency: ``alpha = observed_alpha * alpha_scale`` (an unset alpha is matplotlib's "opaque", i.e. 1.0). See `hypertools.plot.forecast.FORECAST_ALPHA_SCALE` for why, and for the @@ -644,25 +644,25 @@ def _forecast_style_from(src_line, alpha_scale=FORECAST_ALPHA_SCALE, overlay (`_draw_forecast_overlays`, which also serves ``animate='spin'``) and the per-frame live/trail artists all call it, so no two of them can drift apart. `plotly_backend._forecast_style_from` is its plotly twin - (same policy, plotly's colour/width/dash/opacity vocabulary). + (same policy, plotly's color/width/dash/opacity vocabulary). Parameters ---------- src_line : matplotlib.lines.Line2D or None The observed trace being continued. ``None`` (fewer drawn lines than datasets -- the same defensive case the call sites already guarded) - falls back to matplotlib's own defaults, letting the colour cycle. + falls back to matplotlib's own defaults, letting the color cycle. alpha_scale : float, default `FORECAST_ALPHA_SCALE` override : dict or None This dataset's `forecast_*=` override (`forecast.resolve_forecast_overrides`). Sparse: only the aspects it names replace the inherited ones. anchor_color : RGB(A) tuple or None - Under a CONTINUOUS `hue=` the observed trace has many colours, so - "the same colour as its trace" resolves to the colour where the - forecast starts: the final observed point's hue colour. Passed here + Under a CONTINUOUS `hue=` the observed trace has many colors, so + "the same color as its trace" resolves to the color where the + forecast starts: the final observed point's hue color. Passed here (rather than read off `src_line`) because the line artist carries - the per-dataset palette colour, which is a colour nothing visible is + the per-dataset palette color, which is a color nothing visible is drawn in. A `forecast_*=` override still wins over it. Plotly's twin takes the same argument, so both backends anchor identically. @@ -672,10 +672,10 @@ def _forecast_style_from(src_line, alpha_scale=FORECAST_ALPHA_SCALE, ``color``/``linestyle``/``linewidth``/``alpha`` kwargs for `ax.plot` (plus ``marker`` when `forecast_fmt=` asked for one). """ - # an explicit forecast COLOUR (`forecast_hue=`/`forecast_cluster=`/ - # `forecast_palette=`, or a colour letter in `forecast_fmt=`) is what + # an explicit forecast COLOR (`forecast_hue=`/`forecast_cluster=`/ + # `forecast_palette=`, or a color letter in `forecast_fmt=`) is what # tells the forecast from its trace, so it is drawn at the trace's own - # alpha rather than faded on top of being recoloured (1.1 release + # alpha rather than faded on top of being recolored (1.1 release # review, feature-tour 9.10: Set1 forecasts at 0.35 over 0.7 leaves # were invisible). `forecast_alpha_scale_for` is the one rule. from .forecast import forecast_alpha_scale_for @@ -711,7 +711,7 @@ def _observed_run_lines(lines): observations (`matplotlib_backend._plot_possibly_split`, which tags the companion ``_hyp_marker_companion``). Every consumer that looks a run up by index (the forecast and truth overlays' style source, the animated - head-run colour) must skip the companions, or run ``i`` reads run + head-run color) must skip the companions, or run ``i`` reads run ``i // 2``'s artists: three ``'o-'`` datasets gave forecasts red, red, green instead of red, green, blue (1.1 release review, F1). """ @@ -723,7 +723,7 @@ def _draw_forecast_overlays(ax, raw_forecasts, antialias=True, owner=None, overrides=None, labels=None, dataset_index=None, src_lines=None): """Overlay one forecast trace per input dataset (GH #169), styled to - match its source line (`_forecast_style_from`): same colour, linestyle + match its source line (`_forecast_style_from`): same color, linestyle and linewidth, at half its alpha. Called AFTER `_draw` has already built the legend (from the original data @@ -743,8 +743,8 @@ def _draw_forecast_overlays(ax, raw_forecasts, antialias=True, model's name, for every `predict=` form (1.1: a collection labels each model; the single-model form labels its one model too). The label is NOT put on the artist (every artist stays ``'_nolegend_'``): a model's - forecasts over several datasets are drawn in several colours, and a - legend built from the first of them would show dataset 0's colour as if + forecasts over several datasets are drawn in several colors, and a + legend built from the first of them would show dataset 0's color as if it were the model's. Each artist is tagged ``_hyp_forecast_label`` instead, and `_forecast_legend_handles` builds one proxy glyph per distinct label from those tags -- which `plot()` adds to the legend @@ -838,8 +838,8 @@ def _draw_forecast_overlays(ax, raw_forecasts, antialias=True, from .forecast import override_has_color as _pins_colour for _ds, _a in _artist_dataset: _a._hyp_forecast_role = 'static' - # an explicit forecast colour (forecast_hue=/cluster=/palette=, a - # colour letter in forecast_fmt=) that a continuous hue= must not + # an explicit forecast color (forecast_hue=/cluster=/palette=, a + # color letter in forecast_fmt=) that a continuous hue= must not # repaint (`_apply_multicolor_lines`/`_apply_multicolor_markers`) _a._hyp_forecast_pinned = bool(_pins_colour( overrides[_ds] if overrides is not None @@ -857,7 +857,7 @@ def _add_overlay_legend_entries(ax, forecast_artists=None, truth_artists=None, know about -- it built the legend from the data lines before any overlay existed. One proxy per forecast label (`_forecast_legend_handles`) goes in after the data entries, and a - labelled `truth=` artist after those; entries already present are + labeled `truth=` artist after those; entries already present are kept, in place, so calling this once for the forecasts and once for the truth overlay lists ``data..., forecasts..., truth`` either way. No legend on the axes means the call asked for none: nothing is added. @@ -896,9 +896,9 @@ def _add_overlay_legend_entries(ax, forecast_artists=None, truth_artists=None, labels = [lab for _, lab in kept] + [h.get_label() for h in fc_handles] if truth_lines: first = truth_lines[0] - # the colour decided over EVERY truth artist, not only the tagged + # the color decided over EVERY truth artist, not only the tagged # first one: the key stands for all datasets' truths, and wore - # dataset 0's colour whatever the others were (1.1 review, F10) + # dataset 0's color whatever the others were (1.1 review, F10) colors = {to_rgba(ln.get_color()) for ln in ax.lines if getattr(ln, '_hyp_forecast_role', None) == 'truth'} handles.append(Line2D( @@ -912,14 +912,14 @@ def _add_overlay_legend_entries(ax, forecast_artists=None, truth_artists=None, def _recolor_overlay_legend(ax, colors, close_fig=None): - """Apply `legend_colors=`'s plain colour list to a legend that also + """Apply `legend_colors=`'s plain color list to a legend that also lists `predict=`/`truth=` overlay entries (data entries first, then the overlays -- `_add_overlay_legend_entries`' order). - One colour per legend entry recolours them all. One colour per DATA + One color per legend entry recolors them all. One color per DATA entry -- what the list meant before a forecast had a legend entry of its own, and still what it means on a legend without overlays -- - recolours the data entries and leaves the forecast/truth glyphs as + recolors the data entries and leaves the forecast/truth glyphs as drawn (1.1 release review: ``legend_colors=['r', 'b']`` with ``predict=`` raised 'the legend has 3'). Any other count raises ``ValueError`` -- after closing `close_fig` (the figure this call @@ -959,10 +959,10 @@ def _forecast_legend_handles(artists): Each handle wears its forecasts' linestyle, linewidth, marker and alpha -- so the key looks like the faded, dashed lines it names -- and their - colour when every forecast under that label shares one (a single - dataset, or a `forecast_palette=` that colours by model). When the - label spans several colours (one model continuing several datasets, - each in its own colour) the glyph is `forecast.FORECAST_LEGEND_COLOR`, + color when every forecast under that label shares one (a single + dataset, or a `forecast_palette=` that colors by model). When the + label spans several colors (one model continuing several datasets, + each in its own color) the glyph is `forecast.FORECAST_LEGEND_COLOR`, a neutral gray: the entry then stands for the model, not for any one dataset. `plotly_backend._forecast_legend_traces` is its twin, so both backends list the same entries with the same glyphs. @@ -1004,7 +1004,7 @@ def _draw_truth_overlays(ax, raw_truths, antialias=True, owner=None, label=None, src_lines=None): """Overlay each trace's ACTUAL continuation (`truth=`, GH #285). - Styled from the trace it continues (same colour and linewidth, via + Styled from the trace it continues (same color and linewidth, via `_forecast_style_from` with no alpha fade) and then given `TRUTH_STYLE`, so a viewer can tell truth from forecast at a glance without a legend. Every artist is role-tagged ``'truth'`` on `_hyp_forecast_role`, beside @@ -1041,12 +1041,12 @@ def _draw_truth_overlays(ax, raw_truths, antialias=True, owner=None, # marker+line fmt for the observed data. # The curve KEEPS the marker with `markevery=[]` (draws none) so its # legend glyph shows line + marker -- otherwise the 'truth' entry - # is a solid line in the trace's own colour, identical to the + # is a solid line in the trace's own color, identical to the # observed trace's entry (feature tour 9.11, 2026-09-06; the same # trick `_plot_possibly_split` uses for a marker+line fmt). line_style = dict(style, markevery=[]) marker_style = dict(style, linestyle='None') - # never labelled: the legend entry is a proxy glyph built by + # never labeled: the legend entry is a proxy glyph built by # `_add_overlay_legend_entries` from the `_hyp_truth_label` tag, # so a reused axes lists ONE 'truth' however many calls drew one # (Codex round 4) @@ -1138,13 +1138,13 @@ class _Frame0: def _categorical_color_label_maps(hue, palette, explicit_colors, group_labels, sort_numeric): - """Map each hue category -> (colour, legend label), in the SAME drawn + """Map each hue category -> (color, legend label), in the SAME drawn order the marker/global grouping would use, so a LINE plot's per-category - colours match an equivalent marker plot. + colors match an equivalent marker plot. `explicit_colors`/`group_labels` are the per-category values already resolved by the special hue sub-cases (partially-labeled hue, quantized - matrix/mixture colours, cluster labels); when the colour was left to the + matrix/mixture colors, cluster labels); when the color was left to the palette (plain string/int categorical, hard clustering) it is resolved here from `palette`. `sort_numeric` selects sorted-numeric drawn order (integer hue / cluster ids) over first-appearance order (string hue).""" @@ -1165,7 +1165,7 @@ def _categorical_color_label_maps(hue, palette, explicit_colors, elif isinstance(palette, collections.abc.Mapping): # palette= as a {category: color} DICT (GH #285): resolved by NAME, # so the caller no longer has to work out first-appearance order by - # hand to line a colour list up with the right category. `hue` has + # hand to line a color list up with the right category. `hue` has # already been turned into group IDS by this point, so the names to # match on are `group_labels` (the category names), falling back to # the ids' own str() for hue sources that have no separate names @@ -1184,8 +1184,8 @@ def _categorical_color_label_maps(hue, palette, explicit_colors, # report "lists 3 per-dataset palettes but 2 dataset(s) were # passed" for a three-dataset call. Two readings are meaningful: # every entry a {category: color} dict -- each dataset naming its - # own categories' colours -- merges into one mapping resolved by - # name; anything else has no category to colour and is rejected + # own categories' colors -- merges into one mapping resolved by + # name; anything else has no category to color and is rejected # with the real counts. _names = (list(group_labels) if isinstance(group_labels, (list, tuple)) @@ -1234,7 +1234,7 @@ def _regroup_categorical_lines(xform, hue, labels, cat_color, cat_label): """Regroup LINE data by categorical `hue` into contiguous runs (GH #291). Splits each input dataset into maximal same-category runs (preserving - order + dataset identity), colours each run by its category, bridges only + order + dataset identity), colors each run by its category, bridges only runs adjacent WITHIN one input dataset, and gives each category exactly ONE legend entry (the first run carries the label; later runs of the same category get ``'_nolegend_'``). Returns @@ -1258,7 +1258,7 @@ def _regroup_categorical_lines(xform, hue, labels, cat_color, cat_label): segments, seg_labels, seg_cat, seg_bridge, seg_dataset = segment_by_run( xform, hue, labels) # BEFORE patch_lines, which appends the next run's first point to every - # bridged run: TraceOwnership must not be told a run OWNS its neighbour's + # bridged run: TraceOwnership must not be told a run OWNS its neighbor's # first observation -- it needs the owned span and the drawn span kept # apart (see ownership.TraceOwnership.draw_span). seg_lengths = [len(s) for s in segments] @@ -1653,9 +1653,9 @@ def _matrix_hue_wants_rgb(hue_array, color_reduce, hue_mode=None): The automatic rule is kept as the default because changing it would silently repaint every existing figure with a wide matrix hue. But it cannot be the ONLY rule, because it contradicts what mixture weights are - for: one palette colour per component, one component per leaf. A market + for: one palette color per component, one component per leaf. A market with six sectors needs six columns, and the automatic rule sends exactly - that to the reducer -- measured on the Market candidate, whose 4-colour + that to the reducer -- measured on the Market candidate, whose 4-color palette was ignored outright and whose blue-intended leaves drew red. `hue_mode='mixture'` is how a caller says "these are weights, however many there are"; `hue_mode='rgb'` forces the other branch for a narrow @@ -1668,7 +1668,7 @@ def _matrix_hue_wants_rgb(hue_array, color_reduce, hue_mode=None): def _validate_hue_mode(hue_mode, color_reduce, hue=None): """`hue_mode=` is only meaningful for a MATRIX hue, and only one of - `hue_mode='mixture'` / `color_reduce=` can be honoured at once.""" + `hue_mode='mixture'` / `color_reduce=` can be honored at once.""" if hue_mode is None: return if hue is None: @@ -1748,17 +1748,17 @@ def _hierarchy_hue_per_leaf(hue, n_rows, n_leaves): * rows are NORMALIZED to sum to 1 by `mat2colors`, so only the ratio between components is visible -- halving every weight in a row draws - the identical colour. A second quantity therefore needs its own + the identical color. A second quantity therefore needs its own palette entry (e.g. a black one for "darker = larger"); it cannot ride on the total magnitude; - * negative entries have no colour meaning, so `mat2colors` shifts each - row by its own minimum -- a signed matrix is coloured by within-row + * negative entries have no color meaning, so `mat2colors` shifts each + row by its own minimum -- a signed matrix is colored by within-row CONTRAST, not by absolute value; - * the palette must supply at least one colour per COLUMN; a shorter one + * the palette must supply at least one color per COLUMN; a shorter one raises, a longer one simply leaves components unused; - * a non-finite entry colours that observation neutral grey and warns. + * a non-finite entry colors that observation neutral gray and warns. Because a derived mean is the element-wise mean of its children, one - NaN greys the leaf AND every ancestor mean at that row; + NaN grays the leaf AND every ancestor mean at that row; * every per-leaf matrix must have the same width -- they share one palette; * BY DEFAULT the width decides: more than 3 columns, or any explicit @@ -1817,7 +1817,7 @@ def _hierarchy_hue_per_leaf(hue, n_rows, n_leaves): f"{wrong}. {expected}.") # A 2-D per-leaf entry is a MATRIX hue: one row of mixture weights # per observation, blended through the palette. It is kept AS a - # matrix rather than ravelled -- ravelling passes the length check + # matrix rather than raveled -- raveling passes the length check # above (the first dimension IS n_rows) and then reinterprets each # row's k weights as k consecutive CONTINUOUS values, which drew # every trace across ~220 degrees of hue instead of holding one. @@ -2305,7 +2305,7 @@ def _validate_title_color(title_color, segment_titles, title_kwargs=None): A single color (string or RGB(A) tuple) styles whatever title is drawn. A SEQUENCE of colors -- or a callable ``ctx -> color`` -- tints each segment of a serial/morph `title=` LIST, so it is only meaningful - alongside one. Naming a colour BOTH here and as + alongside one. Naming a color BOTH here and as ``title_kwargs={'color': ...}`` is a conflict (one of them silently lost), so it raises. """ @@ -2315,7 +2315,7 @@ def _validate_title_color(title_color, segment_titles, title_kwargs=None): raise ValueError( f"title_color={title_color!r} and title_kwargs['color']=" f"{title_kwargs['color']!r} were both given; they set the same " - "title colour, so pass only one of them.") + "title color, so pass only one of them.") if callable(title_color) or ( not _is_single_color(title_color) and isinstance(title_color, (list, tuple, np.ndarray))): @@ -2384,7 +2384,7 @@ def _validate_title_wrap(title_wrap): # -------------------------------------------------------------------------- # GH #285 (animation group): dynamic `title=`, `loop=`, `dataset_fade=` and # `companion=`. Every one of them is opt-in and defaults to the exact -# pre-1.1.x behaviour. +# pre-1.1.x behavior. # -------------------------------------------------------------------------- #: Substring that turns a `title=` string into a per-frame format PATTERN. @@ -2401,7 +2401,7 @@ def _title_is_pattern(title): def _dataset_values(item): """The values of ONE user dataset as a numpy array: a DataFrame dataset - (`is_frame_dataset`: pandas, polars, whatever datawrangler recognises) + (`is_frame_dataset`: pandas, polars, whatever datawrangler recognizes) through its pandas form, a series-like (`is_series_like`) through its ``to_numpy``, anything else through `np.asarray`.""" if is_frame_dataset(item): @@ -2434,7 +2434,7 @@ def _capture_row_indices(x): """ def _index_of(item): if is_frame_dataset(item): - # every dataframe backend datawrangler recognises, read through + # every dataframe backend datawrangler recognizes, read through # its pandas form; a backend with no row index (polars) comes # back with the default RangeIndex, i.e. "no index" below item = as_pandas_dataframe(item) @@ -2473,7 +2473,7 @@ def _capture_column_names(x): """ def _columns_of(item): if is_series_like(item): - # a labelled vector's one column is its name (pandas: None when + # a labeled vector's one column is its name (pandas: None when # unnamed; polars: '' when unnamed) name = getattr(item, 'name', None) return None if name is None or name == '' else [str(name)] @@ -2803,8 +2803,8 @@ def _series_expand_list(value, owner, n_input, key=None): natural way to style k columns of one frame) is left exactly as passed. `key` names the kwarg, when there is one: a bare ``(r, g, b[, a])`` - tuple under ``color`` is ONE colour, not three per-dataset values, and - three datasets would otherwise turn it into three separate colours + tuple under ``color`` is ONE color, not three per-dataset values, and + three datasets would otherwise turn it into three separate colors (`_is_single_color` settles the same ambiguity for `title_color=`/`legend_colors=`). """ @@ -3480,7 +3480,7 @@ def _resolve_panel_grid(panels, n_panels, size=None, _name='panels'): _PANEL_SPECIAL_KWARGS = ('hue', 'labels', 'palette', 'legend', 'predict', 'title') -#: colour kwargs whose 3/4-number tuple is ONE colour, not one entry per +#: color kwargs whose 3/4-number tuple is ONE color, not one entry per #: dataset (`_is_single_color`). Every other per-dataset list -- notably #: ``alpha=[0.3, 0.6, 0.9]`` for three datasets -- is sliced as a list. _PANEL_COLOR_KWARGS = ('color', 'colors') @@ -3496,10 +3496,10 @@ def _panel_slice_per_dataset(value, index, n_datasets, single_color=False): def _panel_slice_palette(palette, index, n_datasets): """Narrow a PER-DATASET `palette=` list (``['viridis', 'magma']``, a - list of colour lists, a list of ``{category: color}`` dicts -- see + list of color lists, a list of ``{category: color}`` dicts -- see `palette=`) to panel `index`'s own entry, as a one-entry per-dataset list (which `plot()` broadcasts to the panel's single dataset). A list - that is one palette of explicit colours is a single palette and is + that is one palette of explicit colors is a single palette and is forwarded whole, exactly as the single-axes call reads it.""" if (_looks_like_dataset_palettes(palette) and len(palette) == n_datasets): @@ -3522,13 +3522,13 @@ def _panel_slice_legend(legend, index, n_datasets, kw): def _panel_slice_legend_colors(legend_colors, index, n_datasets, kw): - """Narrow a plain `legend_colors=` colour LIST to panel `index`. + """Narrow a plain `legend_colors=` color LIST to panel `index`. - On one axes a plain list recolours the legend's entries in order: one + On one axes a plain list recolors the legend's entries in order: one per dataset first, then the entries every dataset shares (the forecast model(s), ``truth``). Each panel's legend lists ITS dataset and those - shared entries, so it gets its dataset's colour followed by the shared - colours -- forwarding the whole list made every panel refuse it ("has 2 + shared entries, so it gets its dataset's color followed by the shared + colors -- forwarding the whole list made every panel refuse it ("has 2 entries but the legend has 1", 1.1 release review), though the same call works on one axes. Only when the entries name the DATASETS (nothing regroups the traces, as in `_panel_slice_legend`); a @@ -3572,7 +3572,7 @@ def _panel_forecast_labels(hue, n_datasets, n_models): return None if is_series_like(hue): # a pandas / polars Series or Index (any series-like datawrangler - # recognises) is a label vector like a list (Codex round 11) + # recognizes) is a label vector like a list (Codex round 11) hue = np.asarray(hue).ravel() if not isinstance(hue, (list, tuple, np.ndarray)): return None @@ -3590,8 +3590,8 @@ def _panel_pick_model_major(seq, index, n_datasets, n_models): def _panel_observed_groups(kw): - """How many palette colours the single-axes call's OBSERVED data takes - when a grouping colours it: the categories of a categorical (string) + """How many palette colors the single-axes call's OBSERVED data takes + when a grouping colors it: the categories of a categorical (string) `hue=`, or an integer `n_clusters=`. None when nothing groups the data or the count is not knowable from the arguments alone (then each dataset is counted as one slot).""" @@ -3634,12 +3634,12 @@ def _panel_slice_forecast_kwargs(kw, index, n_datasets, grid_kw=None): model-major for a collection) -> the panel's own; one per MODEL is forwarded unchanged (every panel draws every model). - `forecast_palette=`: with a list-valued `forecast_hue=` the grid's - label -> colour map is resolved ONCE (with the palette the single- - axes call would use) and each panel receives its own labels' colours - in its own first-appearance order, so a label keeps one colour + label -> color map is resolved ONCE (with the palette the single- + axes call would use) and each panel receives its own labels' colors + in its own first-appearance order, so a label keeps one color across panels; with nothing to group by and a single model it is - spent one colour per forecast, so the panel receives its forecast's - colour. A collection's per-MODEL palette is forwarded unchanged. + spent one color per forecast, so the panel receives its forecast's + color. A collection's per-MODEL palette is forwarded unchanged. """ predict = kw.get('predict') if predict is None: @@ -3655,7 +3655,7 @@ def _panel_slice_forecast_kwargs(kw, index, n_datasets, grid_kw=None): labels, index, n_datasets, n_models) # the palette is resolved against the WHOLE grid's labels, in # the single-axes call's own order (`_forecast_label_colors`), - # and the panel gets the colours of its own labels in the order + # and the panel gets the colors of its own labels in the order # it will first see them -- an unlabeled forecast takes no slot # (`is_missing_label`), exactly as `resolve_forecast_overrides` # reads it @@ -3664,8 +3664,8 @@ def _panel_slice_forecast_kwargs(kw, index, n_datasets, grid_kw=None): _labels = [None if is_missing_label(v) else v for v in labels] if fc_palette is None: # the single-axes default (`_forecast_group_palette`): the - # palette continued past the colours the single-axes figure's - # observed datasets take, so a label keeps that figure's colour + # palette continued past the colors the single-axes figure's + # observed datasets take, so a label keeps that figure's color # read from the WHOLE grid's kwargs (`grid_kw`), before any # per-dataset argument was narrowed to this panel _grid = kw if grid_kw is None else grid_kw @@ -3684,9 +3684,9 @@ def _panel_slice_forecast_kwargs(kw, index, n_datasets, grid_kw=None): _own = _panel_pick_model_major(_labels, index, n_datasets, n_models) _own_colours = _panel_pick_model_major( _colours, index, n_datasets, n_models) - # one slot per DISTINCT LABEL, not per distinct colour: the + # one slot per DISTINCT LABEL, not per distinct color: the # panel's `resolve_forecast_overrides` spends the palette one - # colour per label it sees, so two labels that share a colour on + # color per label it sees, so two labels that share a color on # purpose (``forecast_palette=['red', 'red']``, a palette name # that cycles) must keep two entries (Codex round 6) _seen, _ordered = [], [] @@ -3804,17 +3804,17 @@ def _panel_slice_per_observation(value, index, lengths): def _matrix_hue_legend_entries(hue_array, palette, legend, column_names): """One legend proxy entry per hue-matrix COLUMN (GH #285). - A matrix/mixture `hue=` blends a palette colour per observation, so + A matrix/mixture `hue=` blends a palette color per observation, so there are no discrete traces to label and hypertools used to drop any `legend=` with a warning -- leaving every such figure to hand-build `Line2D` proxies (`examples/animate_market_sectors.py`). The palette entries the blend is made OF are a perfectly good key, so build one - swatch per column instead: labelled from an explicit ``legend=[...]`` + swatch per column instead: labeled from an explicit ``legend=[...]`` list, else the hue DataFrame's own column names, else ``1..k``. Returns a list of ``(label, color)`` pairs, or None when the matrix is literal RGB (`hue_mode='rgb'`/`color_reduce=`), where the columns are - colour channels rather than palette weights and no key exists. + color channels rather than palette weights and no key exists. """ n_columns = int(hue_array.shape[1]) colors = get_palette_colors(palette, n_columns) @@ -3824,7 +3824,7 @@ def _matrix_hue_legend_entries(hue_array, palette, legend, column_names): f"legend was given as a list of length {len(legend)}, but " f"the matrix hue= has {n_columns} columns; under a " "matrix/mixture hue the legend names one entry per hue " - "COLUMN (the palette colours the per-observation blend is " + "COLUMN (the palette colors the per-observation blend is " "made of).") labels = [str(el) for el in legend] elif column_names is not None and len(column_names) == n_columns: @@ -3862,7 +3862,7 @@ def _resolve_label_anchor(label_anchor, length): def _validate_label_anchor_value(label_anchor): - """`label_anchor=` must be a recognised anchor name or an int; checked + """`label_anchor=` must be a recognized anchor name or an int; checked up front, independent of `labels=` (1.1 release review T8).""" if label_anchor is None or label_anchor in ('first', 'center', 'middle', 'last'): @@ -4080,7 +4080,7 @@ def _panel_lift_for(xi, source): def _panel_frame(source, xi): - """The analyzed rows `xi` of one shared-fit panel, re-labelled with the + """The analyzed rows `xi` of one shared-fit panel, re-labeled with the source dataset's row index (and, when the width survived the pipeline, its column names) so `plot()` captures them exactly as it would for the raw frame: `ndims=1` series mode then draws dates on x and names y after @@ -4199,12 +4199,12 @@ class _PanelClusterLabels: single-axes call never drew. `categories` is the probe's COMPLETE cluster label set, in the order - the single-axes call colours it (sorted, as `plot()`'s cluster branch - sorts hard labels): the label-to-colour mapping every cell of the grid + the single-axes call colors it (sorted, as `plot()`'s cluster branch + sorts hard labels): the label-to-color mapping every cell of the grid shares. A shared fit's per-dataset slice can miss a cluster entirely, - and colouring the slice from ITS OWN label set drew global clusters 1 - and 0 in the same first palette colour in adjacent panels (round 9); - None for soft (mixture) labels, whose blends carry their own colours. + and coloring the slice from ITS OWN label set drew global clusters 1 + and 0 in the same first palette color in adjacent panels (round 9); + None for soft (mixture) labels, whose blends carry their own colors. """ __slots__ = ('labels', 'model', 'spec', 'categories') @@ -4223,7 +4223,7 @@ def __repr__(self): def _hard_cluster_categories(labels): """The sorted label set `plot()`'s cluster branch draws HARD cluster `labels` in (first-appearance order when they do not sort), or None - for a soft (2-D, mixture-proportion) labelling.""" + for a soft (2-D, mixture-proportion) labeling.""" if labels is None: return None arr = np.asarray(labels) @@ -4237,10 +4237,10 @@ def _hard_cluster_categories(labels): def _replayed_cluster_colors(present, categories, palette): - """The colours of the cluster labels `present` (in drawn order) under + """The colors of the cluster labels `present` (in drawn order) under the SHARED mapping a `panels=` probe fitted: label ``categories[k]`` - takes the k-th of the palette's ``len(categories)`` colours -- the - colour the single-axes call, which draws every category, gives it. + takes the k-th of the palette's ``len(categories)`` colors -- the + color the single-axes call, which draws every category, gives it. None when there is no shared mapping to apply: no `categories`, a label the probe never produced, or a ``{category: color}`` palette, which every path already resolves by NAME.""" @@ -4549,8 +4549,8 @@ def _plot_panels(x, panels, call_kwargs, _name='panels'): # the ONE clustering fit across every dataset, each panel # replaying its own dataset's slice of the labels (the same rows # `_panel_narrow_kwargs` slices a flat hue= by) under the ONE - # label-to-colour mapping (`categories=`: a slice missing a - # cluster must not shift the others' colours, round 9) + # label-to-color mapping (`categories=`: a slice missing a + # cluster must not shift the others' colors, round 9) panel_clusters = [] offsets = np.cumsum([0] + lengths) for i in range(n_panels): @@ -4597,7 +4597,7 @@ def _plot_panels(x, panels, call_kwargs, _name='panels'): if panel_clusters[i] is not None: # ...and its probe's clustering, replayed (no second fit) kw.update(cluster=panel_clusters[i], n_clusters=None) - # each panel's rows, labelled with its source frame's index and + # each panel's rows, labeled with its source frame's index and # column names so series mode keeps dates on x and the column on y # exactly as the raw frame would (P2) panel_data.append([_panel_frame(src, xi) @@ -4666,7 +4666,7 @@ def _plot_panels(x, panels, call_kwargs, _name='panels'): # legend or colorbar) -- so `tight_layout` does not shrink the # panels to fit them (1.1 release review, feature-tour 9.8: three # 10-entry legends left three 1.3 in cubes). An explicit `size=` - # is honoured verbatim. + # is honored verbatim. _cols = ncols if n_panels > 1 else 1 _extra = 0.0 if any(a.get_legend() is not None for a in panel_axes): @@ -5001,7 +5001,7 @@ def plot( a mismatched length raises ``ValueError``. Any `color`/`colors`/ `linewidth`/`alpha` kwarg is ignored (with a ``UserWarning``) since MultiIndex grouping owns those. `legend=` is the one overridden - kwarg that is HONOURED rather than warned away: a list renames the + kwarg that is HONORED rather than warned away: a list renames the top-level groups (one entry per unique top-level value, in first-appearance order -- see `legend` below) and ``legend=False`` suppresses the automatic legend. `names=` (per-INPUT-DATASET @@ -5108,7 +5108,7 @@ def plot( differ the same way, and did before 1.1 -- so it is DOCUMENTED, not silently worked around. A canonical group order would mean inventing a total ordering over arbitrary, mixed-type, NA-bearing labels, and - would make a labelled hierarchy behave differently from the + would make a labeled hierarchy behave differently from the equivalent positional list of datasets. Pass ``reduce='PCA'`` when block order must not matter. @@ -5125,10 +5125,10 @@ def plot( A mean trace takes the **element-wise mean of its members' hue**, computed by the same operation that averages their data, so an auxiliary value can never drift out of step with the trace it - describes. Colours are mapped over the concatenation of every + describes. Colors are mapped over the concatenation of every trace's values, leaves and means together, so one scale spans the figure and a `colorbar=` reads against all of it. The hierarchy - still sets linewidth, alpha and labels; only its colours step aside. + still sets linewidth, alpha and labels; only its colors step aside. The per-trace values are returned as ``trace_metadata['aux']``. A flat array sized to the TOTAL DRAWN observations is **rejected**, @@ -5156,7 +5156,7 @@ def plot( position. A **column**-MultiIndex DataFrame in a list instead raises ``ValueError`` -- before 1.1 it silently flattened to a single line with no warning at all. The asymmetry is deliberate: the row - behaviour is documented and depended upon, the column one was not. + behavior is documented and depended upon, the column one was not. See docs/hierarchy.rst for the user-facing guide to all of the above: the per-axis comparison table, worked examples of each rule, @@ -5243,7 +5243,7 @@ def plot( entries, non-numeric, out of range) is also just ignored-with-a- warning in this case, not validated against and raised on -- whether ``alpha=`` will be used is decided before it is checked. - A continuous or matrix `hue=` keeps it: the per-point coloured + A continuous or matrix `hue=` keeps it: the per-point colored line segments AND markers carry their dataset's alpha. A `predict=` forecast overlay is drawn at HALF its dataset's alpha @@ -5376,10 +5376,10 @@ def plot( `hue=` (or `cluster=`/`n_clusters=`) the drawn groups are categories rather than datasets, so only a list of ``{category: color}`` dicts is meaningful there -- each dataset's dict names - its own categories' colours, and they are merged into one mapping - resolved by name (naming one category with two different colours + its own categories' colors, and they are merged into one mapping + resolved by name (naming one category with two different colors raises); any other per-dataset list with a categorical grouping - raises ``ValueError`` stating both counts. A plain colour list + raises ``ValueError`` stating both counts. A plain color list shorter than the number of datasets is CYCLED when there is no hue (``['red', 'blue']`` over three datasets draws red, blue, red), as it always was. @@ -5473,7 +5473,7 @@ def plot( It may also carry one SCALAR per dataset, broadcast over that dataset's rows -- ``hyp.plot(windows, hue=speakers)`` instead of ``hue=[[speaker] * len(w) for speaker, w in zip(speakers, - windows)]`` -- so datasets sharing a value share a colour. The + windows)]`` -- so datasets sharing a value share a color. The exact rule: this reading applies only when `hue` is a list/tuple of exactly ``len(x)`` entries, NONE of them a sequence (a sequence per entry is the nested form above), there is more than one dataset, @@ -5501,8 +5501,8 @@ def plot( width, the historical rule described under `color_reduce`). ``'mixture'`` blends each row through `palette` as weights, one - palette colour per COLUMN, whatever the width. This is what a - hierarchy needs to make its own colour scheme: give each leaf one + palette color per COLUMN, whatever the width. This is what a + hierarchy needs to make its own color scheme: give each leaf one primary and every derived mean comes out the blend of its children, with nothing computing it. Six sectors need six columns, and the automatic rule would send exactly that to the reducer instead. @@ -5615,17 +5615,17 @@ def plot( with a ``UserWarning`` (that path colors by value, so there are no discrete groups to name). - A NESTED-list `x` (``[[a, b], [c, d]]``) colours every leaf by its + A NESTED-list `x` (``[[a, b], [c, d]]``) colors every leaf by its outer group, and its legend follows the same rule: one entry per outer group (``1..n`` for ``True``, or a list with one name per group), drawn on the group's shallowest leaf; a list with one entry per LEAF still labels every leaf. Under a matrix-valued (mixture) `hue=` the blended per-observation - colours have no discrete traces to label, so hypertools used to + colors have no discrete traces to label, so hypertools used to drop the legend with a warning. It now builds one proxy swatch per - hue COLUMN instead -- the palette colours the blend is made of -- - labelled from an explicit ``legend=[...]`` list (which must then + hue COLUMN instead -- the palette colors the blend is made of -- + labeled from an explicit ``legend=[...]`` list (which must then have one entry per hue column), else the hue DataFrame's own column names, else ``1..k``. A literal-RGB matrix hue (`hue_mode='rgb'` or `color_reduce=`) and a 1-D continuous hue still have no finite key @@ -5637,7 +5637,7 @@ def plot( 2}`), or to plotly's ``layout.legend`` (`{'x': 0.02, 'y': 0.98, 'orientation': 'h'}`) under `backend='plotly'`. Applied LAST, so anything given here wins over hypertools' own defaults (a - frameless legend centred outside the right edge). Default None. + frameless legend centered outside the right edge). Default None. legend_colors : list of colors, or list of (label, color) pairs An explicit override of the legend's swatches. A plain list of @@ -5649,12 +5649,12 @@ def plot( ``NotImplementedError`` there). A list of ``(label, color)`` pairs REPLACES the legend outright with exactly those entries, on both backends -- which is how a figure adds a key entry no trace - corresponds to (e.g. a grey "Market" line alongside per-sector + corresponds to (e.g. a gray "Market" line alongside per-sector swatches). Mixing the two forms raises ``ValueError``. Under - `panels=`, a plain list naming the datasets (one colour per + `panels=`, a plain list naming the datasets (one color per dataset, then one per shared entry such as a forecast model or ``truth``) is split so each panel's legend gets its own dataset's - colour followed by the shared ones; a pair list is drawn whole in + color followed by the shared ones; a pair list is drawn whole in every panel. Default None. colorbar : bool or dict @@ -5742,7 +5742,7 @@ def plot( probe; plotly's ``layout.margin.t``), so a larger title still fits on the canvas. - On `backend='plotly'` the size/family/weight/style/colour/y keys + On `backend='plotly'` the size/family/weight/style/color/y keys map onto ``layout.title``; anything plotly's title cannot express (``pad``, ``loc``, ``backgroundcolor``, ``linespacing``, ...) is reported in one ``UserWarning`` naming the backend and the keys. @@ -5752,9 +5752,9 @@ def plot( A single color styles the whole figure's title (shorthand for ``title_kwargs={'color': ...}``). A LIST of colors tints each segment of a per-segment `title=` list -- one per segment, so each - dataset's title can carry that dataset's own colour -- and requires + dataset's title can carry that dataset's own color -- and requires `title=` to be such a list. A CALLABLE receives the per-frame - `FrameContext` (see `on_frame=`) and returns the colour for that + `FrameContext` (see `on_frame=`) and returns the color for that frame; being frame-driven it is matplotlib-only, and raises ``NotImplementedError`` under `backend='plotly'`, whose frames are all built up front. Default None. @@ -5816,7 +5816,7 @@ def plot( - `matplotlib.font_manager.FontProperties`: used as-is. Weights: the package bundles a Bold face beside Noto Sans Regular - (``NotoSans-Bold.ttf``, same licence and provenance), so a bold + (``NotoSans-Bold.ttf``, same license and provenance), so a bold request under the default font -- ``title_kwargs={'fontweight': 'bold'}``, ``legend_kwargs={'prop': {'weight': 'bold'}}`` and the like -- resolves to that real bold face on the matplotlib backend @@ -5930,8 +5930,8 @@ def plot( `return_model=True`) is accepted as a one-step pipeline. A pipeline ending in a fitted `'cluster'` step (a clustered figure's bundle, or ``hyp.analyze(..., cluster=..., return_model=True)``) - colours the figure by that step's labels for `x`, with the fit - figure's cluster colours, unless `hue=` is given; a clusterer with + colors the figure by that step's labels for `x`, with the fit + figure's cluster colors, unless `hue=` is given; a clusterer with no out-of-sample `predict` that cannot label `x` warns and draws without clusters. Mutually exclusive with `manip=`/ `normalize=`/`reduce=`/`ndims=`/`align=`/`cluster=` (each must be @@ -5984,7 +5984,7 @@ def plot( including a `DatetimeIndex`, which ticks as real dates -- or ``0..n-1`` for a plain array), in the data's own units (`axis_scale` defaults to ``'data'`` here). Two or more columns are - allowed and become two or more lines, coloured from `palette` and + allowed and become two or more lines, colored from `palette` and named in the legend by their DataFrame column names (`names=` overrides them; `legend=True` shows them). ``reduce=`` still applies first, to ONE component -- ``ndims=1, reduce='PCA'`` draws @@ -5996,7 +5996,7 @@ def plot( that the line doubles back). Before 1.1 this path drew a single column against ``0..n-1`` with the values rescaled to ``[-1, 1]``, no visible axes, and refused 2+ columns -- so this is a deliberate - behaviour change: what a 1-D figure draws is now the data's own + behavior change: what a 1-D figure draws is now the data's own coordinates. ``axis_scale='unit'`` puts the (index, value) traces back inside the ``[-1, 1]`` frame square like any other 2-D plot, which rescales BOTH axes and so does not restore the pre-1.1 @@ -6007,7 +6007,7 @@ def plot( ``'unit'`` is what hypertools has always done, and remains the default for 2-D and 3-D plots: the (possibly reduced/aligned) - coordinates are mean-centred and rescaled into ``[-1, 1]`` by a + coordinates are mean-centered and rescaled into ``[-1, 1]`` by a single shared affine transform across all datasets (and, with `predict=`, across every forecast vertex), the axes are pinned around hypertools' own frame (2-D: ``(-1.2375, 1.2375)`` around a @@ -6147,7 +6147,7 @@ def plot( one forecast trace per dataset, listed ONCE in the legend (when there is one) under the model's name -- the same name ``hyp.predict(x, model=[spec])`` would give it -- with a glyph in - the forecasts' own style: their colour when every forecast shares + the forecasts' own style: their color when every forecast shares one, else a neutral gray, since the entry then names the model rather than any one dataset. (Before the 1.1.0 release review only a collection of models was listed.) A forecast @@ -6155,10 +6155,10 @@ def plot( observed trace it continues -- same color, same linestyle, same linewidth -- and differs only in transparency: ``forecast_alpha = observed_alpha * 0.5`` (an unset `alpha` is matplotlib's opaque 1.0, - so the default is 0.5). A forecast given its OWN colour + so the default is 0.5). A forecast given its OWN color (`forecast_hue=`, `forecast_cluster=`, `forecast_palette=`, or a - colour letter in `forecast_fmt=`) keeps its trace's alpha instead: - the colour is then what tells it apart, and fading it as well hid + color letter in `forecast_fmt=`) keeps its trace's alpha instead: + the color is then what tells it apart, and fading it as well hid it among translucent traces. Per-dataset styling carries through dataset by dataset, e.g. ``alpha=[1.0, 0.4]`` gives forecasts at ``[0.5, 0.2]``, and a dotted dataset gets a dotted forecast. Both @@ -6175,7 +6175,7 @@ def plot( forecast is recomputed from the history revealed so far and drawn from the endpoint of the current frame, so it grows with the animation. Every one of those forecasts is computed BEFORE the first - frame is drawn and folded into the plot's centre/scale statistics, + frame is drawn and folded into the plot's center/scale statistics, so the whole fan lands inside the cube and nothing is clipped or clamped, and every frame is a lookup -- ``ani.save()`` and ``to_jshtml()`` replays render identically. NOT supported with @@ -6211,18 +6211,18 @@ def plot( ``{name: forecast}`` contract this reuses verbatim, so the two agree by construction. Two things need telling apart -- which series a forecast continues and which model made it -- so each - overlay keeps its dataset's COLOUR (as the single-model form does) + overlay keeps its dataset's COLOR (as the single-model form does) and takes a linestyle per MODEL, cycling solid, dashed, dotted, dash-dot in model order (the first model is solid, so ``predict=['Kalman']`` draws what ``predict='Kalman'`` draws). The legend lists each model by name (the auto-name from the spec, or the mapping key) with a glyph in its linestyle -- neutral gray when - the model's forecasts span several colours. `forecast_fmt=` may be + the model's forecasts span several colors. `forecast_fmt=` may be a list, one entry per model, replacing the cycle; `forecast_palette` - (a seaborn palette name or an explicit colour list) colours by - MODEL instead, one colour per model shared across datasets. + (a seaborn palette name or an explicit color list) colors by + MODEL instead, one color per model shared across datasets. (Until the 1.1.0 release review a per-model ``'husl'`` palette was - the default, and its first colour was the first dataset's own.) + the default, and its first color was the first dataset's own.) Works with `truth=`, static and animated, on both backends. The ``return_model=True`` bundle's ``predict['forecasts']`` becomes a ``{name: [forecast per dataset]}`` @@ -6248,11 +6248,11 @@ def plot( space, and with a `reduce=` spec it is whatever that spec produced, so pass values already in it (hypertools does not re-project `truth=`; the column-count check is what catches the mistake). It - then goes through the SAME centre/scale transform as the data, so + then goes through the SAME center/scale transform as the data, so it lands where the forecast does, and -- like a forecast -- is drawn with its dataset's last observed row prepended so it connects to the trajectory. It is - styled DISTINCTLY from the forecast -- its dataset's colour, solid, + styled DISTINCTLY from the forecast -- its dataset's color, solid, fully opaque, with round markers at the observations -- and its artists are role-tagged ``'truth'`` (matplotlib ``line._hyp_forecast_role``, plotly @@ -6578,7 +6578,7 @@ def plot( forecast_trail (animation only) : bool or int Keep earlier forecasts on screen as a fading fan -- the forecast - analogue of `chemtrails` (default: False). Requires `predict=`; + analog of `chemtrails` (default: False). Requires `predict=`; without it, `ValueError`. `True` retains 16 past forecasts; an int sets the cap (must be >= 1). Each retained forecast is drawn in its dataset's style, exactly like the live one, at an alpha that decays @@ -6598,15 +6598,15 @@ def plot( contain every forecast the animation will draw. forecast_hue : sequence or None - Group the FORECASTS by one value per dataset, colouring them + Group the FORECASTS by one value per dataset, coloring them independently of the observed data (default: `None` -- inherit). Requires `predict=`; without it, `ValueError`. One value per FORECAST, not per observation: a forecast is a single - trace. Datasets sharing a value share a colour, drawn from + trace. Datasets sharing a value share a color, drawn from `forecast_palette=` -- or, without one, from the figure's - `palette=` CONTINUED past the colours the observed data takes, so - no forecast group wears an observed line's colour (see + `palette=` CONTINUED past the colors the observed data takes, so + no forecast group wears an observed line's color (see `forecast_palette=`). Mutually exclusive with `forecast_cluster=` (both decide the same thing), exactly as `hue=` and `cluster=` are for the observed data. @@ -6618,18 +6618,18 @@ def plot( `forecast_fmt=` and to `forecast_palette=`'s no-grouping case. forecast_cluster : str, class, instance, dict, or None - Colour each forecast by WHERE IT IS PREDICTED TO END UP: the forecast - ENDPOINTS are clustered, and each forecast takes its cluster's colour + Color each forecast by WHERE IT IS PREDICTED TO END UP: the forecast + ENDPOINTS are clustered, and each forecast takes its cluster's color (default: `None` -- inherit). Requires `predict=`; without it, `ValueError`. Takes the same model specs as `cluster=`. - So a forecast's colour answers "which of these series are heading to + So a forecast's color answers "which of these series are heading to the same place?" -- a question the observed data cannot answer, which is the point of the separate kwarg. It deliberately does NOT recluster the observed data: inheriting the observed assignment is what the default already does, so that reading would make this a no-op. Nor does it cluster every predicted POINT (a single forecast - would then change colour along its own short path) or whole + would then change color along its own short path) or whole flattened trajectories (sensitive to `t`, to sampling and to dimensionality, where an endpoint has one stable meaning). @@ -6645,9 +6645,9 @@ def plot( In an ANIMATION the groups are resolved ONCE, from the full-history forecasts (the ones `return_model=True` returns), and stay fixed for every frame -- they are not reclustered as the reveal progresses, so - the colours hold still while the forecast geometry moves. Cluster + the colors hold still while the forecast geometry moves. Cluster labels are arbitrary names for groups, so per-frame reclustering - would let a forecast change colour whenever a fit nudged its + would let a forecast change color whenever a fit nudged its endpoint across a boundary, and would repaint a retained `forecast_trail=` fan whose earlier members were drawn under the old grouping. @@ -6661,31 +6661,31 @@ def plot( ignored. forecast_palette : str, list of colors, matplotlib Colormap, or None - Colours for the forecast grouping (default: `None` -- inherit the - observed colours). Requires `predict=`; without it, `ValueError`. + Colors for the forecast grouping (default: `None` -- inherit the + observed colors). Requires `predict=`; without it, `ValueError`. Takes the same forms as `palette=`, so the forecasts can use a different colormap from the data. - With `forecast_hue=` or `forecast_cluster=`, one colour per group. + With `forecast_hue=` or `forecast_cluster=`, one color per group. Left at `None` there, the groups take the figure's `palette=` - CONTINUED past the observed data's colour slots (its datasets, or + CONTINUED past the observed data's color slots (its datasets, or its `hue=`/`cluster=` groups, plus any an earlier call took on a - reused `ax=`) -- the next colours of a fixed-sequence palette such + reused `ax=`) -- the next colors of a fixed-sequence palette such as 'Set2', and the free slots of a finer sampling of an evenly - spaced one such as 'hls' (four observed 'hls' colours -> the groups + spaced one such as 'hls' (four observed 'hls' colors -> the groups get the 45- and 135-degree hues of 'hls' at 8) -- so no forecast - group is drawn in an observed line's colour. A per-dataset or + group is drawn in an observed line's color. A per-dataset or ``{category: color}`` `palette=` has no sequence to continue, so 'hls' is continued past the observed count instead; a continuous - `hue=` (colormap colours, no palette slots) keeps 'hls' from its - first colour. An explicit `forecast_palette=` replaces all of + `hue=` (colormap colors, no palette slots) keeps 'hls' from its + first color. An explicit `forecast_palette=` replaces all of this. With `panels=` the same default is resolved against the - whole grid, so each label keeps the colour the single-axes figure + whole grid, so each label keeps the color the single-axes figure gives it. - With NEITHER, there is no forecast grouping to colour by, so it is - spent one colour per forecast (see `forecast_hue=` on what counts as + With NEITHER, there is no forecast grouping to color by, so it is + spent one color per forecast (see `forecast_hue=` on what counts as one for a hierarchical `x=`) -- except for a COLLECTION of models - (``predict=[...]``), where it is spent one colour per MODEL, shared + (``predict=[...]``), where it is spent one color per MODEL, shared by that model's forecast of every dataset (see `predict=`). forecast_fmt : str, sequence of str, or None @@ -6697,9 +6697,9 @@ def plot( `forecast_hue=`). Overrides ONLY the style: a dotted forecast of a red trace is still - red, unless a colour is also given (via `forecast_palette=`, - `forecast_hue=`, `forecast_cluster=`, or a colour letter in the - format string itself -- an explicit colour beats the format string's, + red, unless a color is also given (via `forecast_palette=`, + `forecast_hue=`, `forecast_cluster=`, or a color letter in the + format string itself -- an explicit color beats the format string's, matching matplotlib's own rule). A marker in the format string (``'ro:'``) is drawn at the forecast's own steps -- the seam observation and each of the `t` forecast rows -- never at the @@ -6782,7 +6782,7 @@ def plot( the FIRST one and hold it again, so a looping player never hard-cuts from the last shape to the first. `n` clouds then give ``2(n + 1) - 1`` hold/transition segments instead of ``2n - 1``, and - the closing hold is titled (and coloured) like the opening one -- + the closing hold is titled (and colored) like the opening one -- `title=` still takes one entry per DATASET, not one per segment. The closing cloud reuses the FIRST cloud's already-sampled points, @@ -6791,7 +6791,7 @@ def plot( independent dataset, so whenever `morph_samples=` actually bites it draws a FRESH random subset for the repeat and the loop point visibly jumps (and, separately, the duplicate shifts the shared - mean-centring every dataset is drawn through). Default ``False``. + mean-centering every dataset is drawn through). Default ``False``. Raises ``ValueError`` for every other `animate` mode -- the reveal styles already end where a repeat would start, so there is nothing for it to close. Supported on both backends. @@ -6858,7 +6858,7 @@ def plot( ``True`` (default) puts a dot on the head. ``hue`` One value per row: the revealed line is drawn as a - colour-mapped ``LineCollection`` through the PLOT's own colour + color-mapped ``LineCollection`` through the PLOT's own color scale when it has one (a continuous ``hue=``), else a linear scale over these values. Default None (a solid ``color``). ``position`` @@ -6872,9 +6872,9 @@ def plot( How much of `size` is left for the panel's own ticks and label (default 0.10, in figure fractions). ``color`` - Line and head-marker colour. Default: the colour the first - dataset's trajectory is drawn in (its ``fmt=`` colour letter, - ``color=``, or its palette colour). + Line and head-marker color. Default: the color the first + dataset's trajectory is drawn in (its ``fmt=`` color letter, + ``color=``, or its palette color). ``xlabel``, ``ylabel`` Axis labels. @@ -7068,17 +7068,17 @@ def plot( `TypeError`. A matplotlib Axes under plotly raises `ValueError`. The datasets are drawn in the `palette` exactly as on a figure of - their own (a caller's Axes used to keep the colour cycle of the + their own (a caller's Axes used to keep the color cycle of the figure it came from), and a second call into the SAME Axes or plotly Figure continues the palette past the datasets the earlier call drew, on both backends -- so composing two calls does not - draw both in the first colour. A fixed-sequence palette (a colour - list, 'deep', 'Set2') gives its next colours; an evenly re-sampled - one ('hls', 'husl', a colormap) fills the gaps between the colours + draw both in the first color. A fixed-sequence palette (a color + list, 'deep', 'Set2') gives its next colors; an evenly re-sampled + one ('hls', 'husl', a colormap) fills the gaps between the colors already drawn rather than repeating one ('hls' drawn as 2 datasets - and then 2 more gives the four 4-colour 'hls' hues). The + and then 2 more gives the four 4-color 'hls' hues). The return_model bundle's ``'colors'`` (and a colorbar) report the - colours drawn. Pass `color=` to choose instead. + colors drawn. Pass `color=` to choose instead. STATIC PLOTS ONLY. An animated plot (any truthy ``animate=``) owns its own figure: it creates one, draws there, and returns it, so an @@ -7161,7 +7161,7 @@ def plot( collection's one-per-MODEL `forecast_fmt=` is forwarded whole, since every panel draws every model), `forecast_palette=` is resolved against the whole grid so a dataset or a `forecast_hue=` - label keeps the colour the single-axes figure gives it, and a + label keeps the color the single-axes figure gives it, and a forecaster already FITTED on every dataset (``hyp.predict(x, return_model=True)``) is bound to each panel's dataset (`Forecaster.for_dataset`) so its learned parameters are @@ -7202,7 +7202,7 @@ def plot( How `panels=` fits the analysis pipeline (GH #285). Ignored without `panels=`/`subplots=`. - ``'shared'`` (default, and the only behaviour before 1.1.x) fits + ``'shared'`` (default, and the only behavior before 1.1.x) fits `manip`/`normalize`/`reduce`/`align` ONCE across every dataset and gives each panel its slice of the result, so the panels share one set of components and are directly comparable. @@ -7536,7 +7536,7 @@ def plot( ``{'fig': ..., 'colors': ..., 'xform_data': ..., 'trace_data': ..., 'trace_metadata': ..., 'animation': ..., 'pipeline': ..., 'models': ..., 'predict': ...}`` instead of the bare figure, where - ``colors`` is the RESOLVED colour scale this figure draws with (see + ``colors`` is the RESOLVED color scale this figure draws with (see below), ``xform_data`` is the normalized/reduced/aligned data, ``animation`` is the ``matplotlib.animation.Animation`` handle (``None`` unless @@ -7545,7 +7545,7 @@ def plot( ``.on_frame()``; pass ``on_frame=`` to this call instead, which still fires regardless of ``return_model=``. - ``colors`` is the colour scale hypertools actually resolved, so a + ``colors`` is the color scale hypertools actually resolved, so a caller can reproduce this figure's mapping in a companion panel instead of guessing at it: ``{'kind': 'continuous'|'discrete'| 'blend', 'palette': ..., 'cmap': , 'norm': @@ -7603,8 +7603,8 @@ def plot( additionally requires at least 2 rows in EVERY final trace, on either axis, and raises otherwise; see `predict`. - ``xform_data`` vs ``trace_data``. ``xform_data`` is the analysed - pipeline output, one entry per analysed INPUT dataset. + ``xform_data`` vs ``trace_data``. ``xform_data`` is the analyzed + pipeline output, one entry per analyzed INPUT dataset. ``trace_data`` is the final PRE-CENTER/PRE-SCALE plotted trajectories -- for a hierarchical input, the leaves followed by the per-level means, which are presentation artifacts built in display @@ -7649,7 +7649,7 @@ def plot( per dataset, each anchored at that dataset's last observation and taking the style of the trace holding it, which is the trace it visually continues. That holds for a categorical `hue=`, a - continuous `hue=` (where the colour is taken at the anchor, since + continuous `hue=` (where the color is taken at the anchor, since the trace has many) and `cluster=`. Drawn, and ``drawn`` is True. 3. **An ANIMATED plot with** `hue=` **or** `cluster=`. Not drawn, and @@ -7915,7 +7915,7 @@ def plot( f"labels (one per drawn trace/group); got " f"{type(legend).__name__}: {legend!r}.") - # ...and every non-list container the check above ACCEPTS is normalised + # ...and every non-list container the check above ACCEPTS is normalized # to a plain list right here, so the label handling downstream (all of # which tests `isinstance(legend, (list, tuple))`, or just `list`) sees # one type. Measured on `hyp.plot([A, B], legend=)`: @@ -7923,7 +7923,7 @@ def plot( # "legend= was given as a list of length ..." below and were handed to # matplotlib WHOLE as each artist's label, so both traces came out # named "['a' 'b']" / "Index(['a', 'b'], dtype='str')" plus two - # "Passing label as a length 2 sequence" UserWarnings; a tuple labelled + # "Passing label as a length 2 sequence" UserWarnings; a tuple labeled # the traces correctly but missed `_build_colorbar_info`'s # `isinstance(legend, list)` branch, so `legend=('A', 'B'), # colorbar=True` drew a colorbar reading ['1', '2']. The hierarchy path @@ -7950,7 +7950,7 @@ def plot( # kwarg the hierarchy overrides warns), and `names=` ALONE raised # "pass dataset names via names= OR a legend= list, not both" on a # call that never mentioned legend=. - # (every accepted container was normalised to a list just above) + # (every accepted container was normalized to a list just above) _legend_user_list = isinstance(legend, (list, tuple)) # ...and the entries themselves, for the plotly hover names of a path # that drops the drawn legend (a continuous hue; `_plotly_hover_names`) @@ -8112,7 +8112,7 @@ def plot( _axis_scale = axis_scale else: raise ValueError( - f"axis_scale must be 'unit' (mean-centre and rescale into the " + f"axis_scale must be 'unit' (mean-center and rescale into the " f"[-1, 1] frame box -- what hypertools has always done) or " f"'data' (draw the pipeline's own coordinates, with real " f"ticks); got {axis_scale!r}.") @@ -8181,7 +8181,7 @@ def plot( _title_color, _title_segment_colors = _validate_title_color( title_color, _segment_titles, _title_kwargs) # `label_anchor=` is checked here whether or not `labels=` is set (an - # unrecognised anchor used to pass silently when there was nothing to + # unrecognized anchor used to pass silently when there was nothing to # anchor), and a BARE STRING `labels=` is rejected outright rather than # counted character by character ("labels has 4 entries" for 'only'). _validate_label_anchor_value(label_anchor) @@ -8693,7 +8693,7 @@ def plot( # depth; these drive multilevel styling below (color by outer group, # thinner/fainter lines per deeper level) nested_groups = nested_depths = None - # set when the nested-list branch below colours every leaf by its outer + # set when the nested-list branch below colors every leaf by its outer # group -- the legend then names the GROUPS (see "handle legend") _nested_group_colored = False if isinstance(x, list) and any(isinstance(el, list) for el in x) \ @@ -8752,7 +8752,7 @@ def plot( # for the return_model bundle's pipeline; None on every other input. _mi_feature_labels = None if is_frame_dataset(x): - # every dataframe backend datawrangler recognises, as hypertools' + # every dataframe backend datawrangler recognizes, as hypertools' # own pandas frame (the same object when it already is one): the # row/column-hierarchy checks below read pandas indexes x = as_pandas_dataframe(x) @@ -8814,8 +8814,8 @@ def plot( if hue is not None: # Classify hue HERE, before the MultiIndex branch below wins the # cluster/hue/nested_groups chain outright. A CONTINUOUS hue is - # normalised to one value sequence per leaf and carried through - # `FinalTraces.aux`, so a mean trace's colour is derived from + # normalized to one value sequence per leaf and carried through + # `FinalTraces.aux`, so a mean trace's color is derived from # its members' hue by the same operation that derives its data. # A categorical hue still defers: it REGROUPS traces, so the # leaves the hierarchy names would stop existing. @@ -8833,7 +8833,7 @@ def plot( # `_mi_hue_per_leaf`, which the branch below hands to the trace # builder as auxiliary values. hue = None - # Hand the pipeline plain arrays rather than the labelled leaves. + # Hand the pipeline plain arrays rather than the labeled leaves. # format_data matches DataFrame features BY COLUMN NAME across # datasets (GH #132), which would duplicate the matching just done # -- and would reject the legitimate duplicate-label case (two share @@ -8843,7 +8843,7 @@ def plot( # feature-label mismatch, reported by name. # # Keep the labels first, though: they are the ONLY record of what - # each analysed column means once the leaves become bare arrays, + # each analyzed column means once the leaves become bare arrays, # and the `return_model=True` bundle's pipeline needs them to match # features by name on re-application too (see # `Pipeline._fit_feature_order`). Every leaf shares this order -- @@ -9039,8 +9039,8 @@ def _has_text(v): xform, _ = analyze(raw, pipeline=pipeline, internal=True, impute=impute, return_model=True) # analyze returns DATA; a fitted trailing cluster step - # colours the figure through the cluster branch below, as - # it coloured the figure it was fit for, unless hue= says + # colors the figure through the cluster branch below, as + # it colored the figure it was fit for, unless hue= says # otherwise (it used to be dropped silently; 1.1 release # review, L13) if hue is None: @@ -9129,9 +9129,9 @@ def _has_text(v): # `trace_data` is whatever the PLOTTED trajectories are at the last point # before centering/scaling; `xform_data` is never reassigned after this # line. They start as the same object and diverge only where the drawn - # trajectories stop being the analysed ones: the display-dimensionality + # trajectories stop being the analyzed ones: the display-dimensionality # projection below (which rebinds `xform`), and the hierarchy branch, - # which draws per-level means that the analysed leaf list does not + # which draws per-level means that the analyzed leaf list does not # contain. `trace_metadata` describes those traces, or is None for # non-hierarchical input. trace_data = xform_data @@ -9198,12 +9198,12 @@ def _has_text(v): # NOT validated/written here (unlike color/linewidth/marker/ # markersize above), even though it is resolved against this same # INPUT dataset count -- validating here would run BEFORE `hue` is - # finalised (the animate='morph' hue-drop, below, can still null it) + # finalized (the animate='morph' hue-drop, below, can still null it) # and BEFORE the MultiIndex/cluster/hue/nested_groups chain that may # override alpha internally has picked its branch, either of which # can disagree with a lookahead taken this early (task-6 second # review, NEW ISSUE). See the alpha= block right before that chain, - # after hue is finalised, for the validation, the + # after hue is finalized, for the validation, the # `_alpha_overridden_internally` lookahead, and the full explanation. # reduce data to <=3 dims for DISPLAY. `analyze` above already applied @@ -9249,9 +9249,9 @@ def _has_text(v): reduce="IncrementalPCA", internal=True, format_data=False) # a display-ONLY projection just ran: the plotted trajectories are no - # longer the analysed ones, so re-point `trace_data` at the rebound + # longer the analyzed ones, so re-point `trace_data` at the rebound # list. `xform_data` deliberately keeps the pre-projection arrays -- - # it was captured before this block and is the analysed pipeline + # it was captured before this block and is the analyzed pipeline # output, which is what `pipeline.transform()` reproduces. trace_data = xform @@ -9773,7 +9773,7 @@ def _compute_forecasts(datasets): # discrete colorbar can label every trace without a length mismatch. hue_group_labels = None # GH #285: proxy legend entries [(label, color), ...] built for a - # matrix/mixture hue, whose blended per-observation colours have no + # matrix/mixture hue, whose blended per-observation colors have no # drawn trace to carry a legend label. None on every other path. _hue_legend_entries = None _hue_column_names = None @@ -9812,7 +9812,7 @@ def _compute_forecasts(datasets): # return_model bundle's pipeline encodes the parameters the figure # was actually drawn with (F13-004) _bundle_cluster_stage = None - # the per-observation cluster labels the FIGURE was coloured/grouped + # the per-observation cluster labels the FIGURE was colored/grouped # by (over every input dataset's rows, in order; None without # clustering), handed back as ``models['cluster_labels']`` -- and what # a `panels=` grid replays into each panel, so a panel never @@ -9822,7 +9822,7 @@ def _compute_forecasts(datasets): # alpha= (1.1): a first-class per-dataset style, promoted out of the # GH #206 `**kwargs` passthrough (where a list raised matplotlib's bare # "alpha must be numeric or None"). Resolved against the INPUT dataset - # count and validated/written HERE -- after `hue` has been finalised + # count and validated/written HERE -- after `hue` has been finalized # (the animate='morph'/list-animate hue-drop just above already ran) # but still before the MultiIndex/cluster/hue/nested_groups chain # below, and still before `_expand_styles_to_runs` (see its @@ -10062,12 +10062,12 @@ def _compute_forecasts(datasets): _model_forecast_owner = [_d for _ in _predict_names for _d in range(len(_ft.arrays))] # legend=[...] under a hierarchy RENAMES the top-level groups - # rather than being discarded: the labelled traces are exactly the + # rather than being discarded: the labeled traces are exactly the # top-level ones, so the caller's entries land on them one-for-one # (in `unique_top` first-appearance order, the same convention # `linestyles=` uses) and the leaves/intermediate means stay - # unlabelled. This is the one hierarchy-overridden kwarg that is - # HONOURED instead of warned away -- color/linewidth/alpha encode + # unlabeled. This is the one hierarchy-overridden kwarg that is + # HONORED instead of warned away -- color/linewidth/alpha encode # the hierarchy's structure (which group, which level), so a # caller's value would contradict the drawing, whereas legend text # names groups the hierarchy has no opinion about. @@ -10084,7 +10084,7 @@ def _compute_forecasts(datasets): xform = _ft.arrays # Contract 5: `trace_data` is the pre-center/pre-scale plotted # trajectory list, which for a hierarchy includes the derived means - # -- deliberately NOT in `xform_data`, which holds only the analysed + # -- deliberately NOT in `xform_data`, which holds only the analyzed # leaves the returned pipeline can reproduce. trace_data = _ft.arrays trace_metadata = {'keys': _ft.keys, 'level_idx': _ft.level_idx, @@ -10097,13 +10097,13 @@ def _compute_forecasts(datasets): if _mi_hue_per_leaf is None: mpl_kwargs["color"] = _mi_style["colors"] else: - # The hierarchy contributes width/alpha/label only: colour comes + # The hierarchy contributes width/alpha/label only: color comes # from the hue, mapped over the CONCATENATION of every trace's # aux (leaves AND means) so one scale spans the whole figure. # `_mi_style['colors']` is dropped on this path only -- setting - # it would give each line artist a flat colour that the + # it would give each line artist a flat color that the # per-segment collections then replace, i.e. dead state that a - # later reader would reasonably take for the real colours. + # later reader would reasonably take for the real colors. # `np.concatenate` on the observation axis: a 1-D aux gives the # flat vector this has always produced, and a 2-D (matrix) aux # keeps its weight columns, which `_multicolor_line_colors` @@ -10157,7 +10157,7 @@ def _compute_forecasts(datasets): if _mi_hue_per_leaf is None: # The COLORBAR's copy of the hierarchy's per-trace labels, kept # in its own variable because it must survive `legend=False`: - # the colorbar is the colour key for the drawn groups, not a + # the colorbar is the color key for the drawn groups, not a # legend, so opting out of the legend must not change which # groups it names. `_build_colorbar_info` reads BOTH the group # names AND the '_nolegend_' entries that collapse leaves and @@ -10207,10 +10207,10 @@ def _compute_forecasts(datasets): # probe is the caller's own seeded single-axes call, and # re-clustering the analyzed rows here, once per panel and # without the caller's random_state, drew different clusters - # from the ones the individual call draws. ...and colour them + # from the ones the individual call draws. ...and color them # under the probe's COMPLETE label set (round 9): a shared - # fit's slice can lack a cluster, and colouring it from its - # own label set drew global cluster 1 in cluster 0's colour. + # fit's slice can lack a cluster, and coloring it from its + # own label set drew global cluster 1 in cluster 0's color. _replayed_labels = cluster.labels _replayed_categories = cluster.categories model = cluster.model @@ -10393,7 +10393,7 @@ def _compute_forecasts(datasets): # LINE animation: segment each dataset into contiguous # same-group runs (never merging a group's non-adjacent # points or crossing a dataset boundary; GH #291), each run - # coloured by its quantized blended group colour. + # colored by its quantized blended group color. blended = mat2colors(cluster_labels, palette=palette) group_ids, group_colors = colors2groups(blended) _cat_color = {gid: group_colors[gid] @@ -10423,7 +10423,7 @@ def _compute_forecasts(datasets): # LINE clustering: contiguous-run segmentation so a cluster's # non-adjacent points are NOT joined into one polyline and # separate datasets are never bridged (GH #291); each run is - # coloured + labelled by its cluster id in sorted order, one + # colored + labeled by its cluster id in sorted order, one # legend/colorbar entry per cluster. _shared_colors = None if _replayed_categories is not None: @@ -10466,7 +10466,7 @@ def _compute_forecasts(datasets): hue_group_labels = [str(_cats[i]) for i in _order] hue_category_names = list(hue_group_labels) if _replayed_categories is not None and "color" not in mpl_kwargs: - # the shared mapping's colours for the clusters THIS cell + # the shared mapping's colors for the clusters THIS cell # draws (a missing cluster leaves a gap, not a shift) _shared_colors = _replayed_cluster_colors( [_cats[i] for i in _order], _replayed_categories, @@ -10640,7 +10640,7 @@ def _compute_forecasts(datasets): # arbitrary matrix hue -> RGB. Shared with the column-hierarchy # path below so that `hue=` and `color_reduce=` mean the SAME thing # whether or not the frame has a hierarchy (they did not: measured, - # color_reduce= changed a flat figure's colours and was silently + # color_reduce= changed a flat figure's colors and was silently # ignored under a hierarchy). if hue_is_matrix and _matrix_hue_wants_rgb(hue_array, color_reduce, @@ -10673,7 +10673,7 @@ def _compute_forecasts(datasets): if legend is True or isinstance(legend, (list, tuple)): if hue_is_matrix and not multicolor_hue_is_rgb: # GH #285: a MATRIX hue has a finite key after all -- - # one palette colour per column -- so draw proxy + # one palette color per column -- so draw proxy # swatches instead of discarding the legend. _hue_legend_entries = _matrix_hue_legend_entries( hue_array, palette, legend, _hue_column_names) @@ -10772,7 +10772,7 @@ def _compute_forecasts(datasets): _run_cat_names = ['the unlabeled group' if c is None else str(c) for c in _cats] # by NAME, not by position (GH #285), so a - # `palette={'a': '#E4572E', ...}` dict colours the + # `palette={'a': '#E4572E', ...}` dict colors the # categories it names and leaves the rest on the # default palette at their own positions. _base = resolve_category_colors(palette, @@ -10805,7 +10805,7 @@ def _compute_forecasts(datasets): # category into one line, and collapse a category that # recurs along a trajectory (A A B B A A) into a tangled # polyline joining non-adjacent points. Segmenting keeps each - # run separate, colours it by its category, bridges only runs + # run separate, colors it by its category, bridges only runs # adjacent within one dataset, and gives each category ONE # legend entry. _cat_color, _cat_label = _categorical_color_label_maps( @@ -10833,7 +10833,7 @@ def _compute_forecasts(datasets): xform = [xform[i] for i in _order] labels = [labels[i] for i in _order] # palette= as a {category: color} DICT (GH #285): the MARKER - # (globally regrouped) categorical path takes its colours from + # (globally regrouped) categorical path takes its colors from # the ambient seaborn cycle, which knows nothing about category # names -- so resolve them explicitly here, in drawn-group # order. The line path already did this via @@ -10867,14 +10867,14 @@ def _compute_forecasts(datasets): and hue_group_labels is not None and len(hue_group_labels) == len(xform)): # ...and every other palette on the MARKER path (round 9): - # the category colours are the palette's first + # the category colors are the palette's first # `n_groups` entries, in drawn-group order -- exactly what # the ambient cycle assigns on a fresh axes -- resolved # here so they belong to the CATEGORIES: on a composed # axes the cycle continues past the datasets an earlier - # call drew, so the groups' colours shifted with it, and a - # colour letter in fmt= (``'ro'``) painted every group - # red where the line path (``'r-'``) kept the hue colours. + # call drew, so the groups' colors shifted with it, and a + # color letter in fmt= (``'ro'``) painted every group + # red where the line path (``'r-'``) kept the hue colors. import seaborn as sns _n_groups = len(xform) mpl_kwargs["color"] = [ @@ -11233,7 +11233,7 @@ def _compute_forecasts(datasets): # overwritten here, so the legend was drawn anyway) legend = names - # nested-list input coloured by OUTER group: every leaf's plotly hover + # nested-list input colored by OUTER group: every leaf's plotly hover # name (and so its legendgroup) is its group's label -- the label the # legend shows on the group's summary leaf, or would under legend=True # -- exactly as a hierarchy's leaves are named by their top-level group. @@ -11273,11 +11273,11 @@ def _compute_forecasts(datasets): isinstance(legend, (list, tuple)) and len(legend) == len(set(nested_groups)) and len(legend) != len(xform)))): - # nested-list input colours every leaf by its OUTER group, so + # nested-list input colors every leaf by its OUTER group, so # the legend names the groups, as a hierarchy's does - # (docs/hierarchy.rst: one labelled entry per top-level group, + # (docs/hierarchy.rst: one labeled entry per top-level group, # every other trace '_nolegend_'). legend=True numbered the - # LEAVES 1..n, so four swatches came in two identical colour + # LEAVES 1..n, so four swatches came in two identical color # pairs (1.1 release review, figure QA). The entry goes on the # group's SUMMARY leaf (its shallowest, which the depth styling # draws thickest and most opaque); a legend= list with one @@ -11322,7 +11322,7 @@ def _compute_forecasts(datasets): # GH #285: the legend entries hypertools draws as explicit proxy # handles. `legend_colors=` given as (label, color) pairs REPLACES the # legend outright; otherwise the matrix/mixture-hue palette swatches - # (if any) are used, and a plain `legend_colors=` colour LIST recolours + # (if any) are used, and a plain `legend_colors=` color LIST recolors # whichever of the two ends up drawn. _final_legend_entries = _legend_entries or _hue_legend_entries if _final_legend_entries is not None and _legend_recolor is not None: @@ -11345,17 +11345,17 @@ def _compute_forecasts(datasets): # gated on colorbar=, for `return_model=True`'s bundle['colors'] and # `HyperAnimation.colors`. Computed HERE, at the same point in the # pipeline as colorbar_info, so the two can never disagree about what - # the figure is coloured by. + # the figure is colored by. colors_info = _build_colors_info( hue, multicolor_hue, cluster, n_clusters, xform, mpl_kwargs, legend, palette, hue_group_labels=hue_group_labels, hierarchy_labels=_mi_colorbar_labels, legend_entries=_final_legend_entries) - # ...which, for datasets coloured from the palette CYCLE (no color=, + # ...which, for datasets colored from the palette CYCLE (no color=, # hue=, cluster=, palette mapping), reads the palette's fresh sampling; - # the colours actually drawn differ when a composed `ax=` continues the - # palette or a fmt= colour letter colours a dataset, so each backend - # branch below re-syncs both scales to the drawn colours + # the colors actually drawn differ when a composed `ax=` continues the + # palette or a fmt= color letter colors a dataset, so each backend + # branch below re-syncs both scales to the drawn colors # (`_sync_color_scales`; 1.1 release review) _color_scales_from_cycle = ( "color" not in mpl_kwargs and hue is None and cluster is None @@ -11579,13 +11579,13 @@ def _finite_before(trace_index): # ...or MARKER-only categorical regrouping, whose traces are # CATEGORIES, never datasets -- even when the counts coincide # (2 datasets under 2 categories silently drew dataset 1's - # forecast in category 1's colour; 1.1 release review) + # forecast in category 1's color; 1.1 release review) or _global_regrouped # ...or a COLLECTION under hue=/cluster= regrouping: one # dataset split into two runs under two models gives two # forecasts for two runs, so the counts coincide by accident # while forecast i does NOT continue run i (Codex round 3: - # Kalman took the earlier run's colour, ARIMA the final run's) + # Kalman took the earlier run's color, ARIMA the final run's) or (_model_forecast_owner is not None and _seg_ds is not None and len(_seg_ds) == len(xform))): # A forecast belongs to a DATASET and is anchored at that dataset's @@ -11619,7 +11619,7 @@ def _finite_before(trace_index): # regrouping, which goes through `reshape_data` and groups # GLOBALLY by category, so 3 datasets under 2 categories become 2 # traces that are not datasets at all. (A CONTINUOUS hue, named - # here previously, is NOT an example: it colours one line artist + # here previously, is NOT an example: it colors one line artist # per dataset through a LineCollection overlay without changing # the trace count, so the correspondence holds and its forecasts # draw -- measured, and pinned by @@ -11674,7 +11674,7 @@ def _finite_before(trace_index): # Animated predict= (CASE A -- STATIC data revealed over time): every # observation is known before the first frame, so every forecast the # animation will ever draw is knowable now. Precompute the whole schedule - # HERE so (a) it can go into the centre/scale statistics below and land + # HERE so (a) it can go into the center/scale statistics below and land # inside the cube BY CONSTRUCTION -- no clamping, unlike the streaming # path in hypertools/io/streaming.py, where the box is frozen from the # head samples -- and (b) every frame is a pure lookup, so ani.save() and @@ -11736,7 +11736,7 @@ def _finite_before(trace_index): # full-history forecast as a STATIC overlay on the plotly backend # (whose static block fires whenever there is no schedule), i.e. the # final forecast visible from frame 0 -- on a figure whose warning - # says none is drawn. It also inflated the centre/scale statistics + # says none is drawn. It also inflated the center/scale statistics # below to fit a forecast that is never rendered. `bundle_forecasts` # is untouched: the fit succeeded and is still reported. raw_forecasts = None @@ -11822,7 +11822,7 @@ def _build_schedule(model_spec): # the animation grid ITSELF, so each frame's forecast starts # at the vertex that frame actually draws last rather than at # the last raw observation behind it (maintainer report, - # 2026-09-11). Passed pre-centre/scale, exactly like + # 2026-09-11). Passed pre-center/scale, exactly like # `analyze_histories`; `to_display` maps both below. grids=xform, **_time_kwargs) @@ -11855,7 +11855,7 @@ def _build_schedule(model_spec): max(1, int(round(frame_rate * duration)))) # Display space (GH #285): axis_scale='unit' -- what hypertools has - # always done -- mean-centres every drawn vertex (data, forecasts, and + # always done -- mean-centers every drawn vertex (data, forecasts, and # every forecast a schedule will ever draw) and rescales it into the # [-1, 1] frame box with ONE shared affine transform. axis_scale='data' # skips it entirely and keeps the pipeline's own coordinates, so the @@ -11926,7 +11926,7 @@ def _rescale(a): # the static forecast overlays, truth overlays and every polyline # in an animation's forecast schedule), so an animated viewport # never jumps as the reveal grows -- the same job the joint - # centre/scale statistics do for 'unit'. + # center/scale statistics do for 'unit'. _bounds_rows = [np.vstack(xform)] if raw_forecasts is not None: _bounds_rows.append(np.vstack(raw_forecasts)) @@ -12113,19 +12113,19 @@ def _surface_inherits_color(i): for _ in range(_n_ds)] if _fc_fmt is None: # several models on one series: each forecast keeps its - # dataset's colour (which series it continues) and takes a + # dataset's color (which series it continues) and takes a # dash per MODEL (which model made it) -- two encodings for # two questions. An explicit forecast_fmt= replaces the dash. from .forecast import forecast_model_fmts _fc_fmt = forecast_model_fmts(len(_predict_names), _n_ds) if _fc_hue is None and forecast_cluster is None \ and _fc_palette is not None: - # forecast_palette= on a collection colours by MODEL: "one - # colour per model" is exactly what forecast_hue= already - # means -- datasets sharing a hue value share a colour -- so + # forecast_palette= on a collection colors by MODEL: "one + # color per model" is exactly what forecast_hue= already + # means -- datasets sharing a hue value share a color -- so # the model name IS the hue. (Without a palette the forecasts - # inherit their datasets' colours; a per-model palette used to - # be the default, and its first colour was the first dataset's + # inherit their datasets' colors; a per-model palette used to + # be the default, and its first color was the first dataset's # own, so two datasets x two models were four lines in two # indistinguishable pairs.) _fc_hue = _forecast_labels @@ -12176,10 +12176,10 @@ def _surface_inherits_color(i): for v in _forecast_style_kwargs.values())): from .forecast import resolve_forecast_overrides # a forecast_hue=/forecast_cluster= grouping without - # forecast_palette= continues the figure's palette PAST the colours + # forecast_palette= continues the figure's palette PAST the colors # the observed data takes (maintainer decision, 1.1 review), so - # cluster 0 is no longer dataset 0's colour. A continuous hue - # colours the data from a colormap, not palette slots: unchanged. + # cluster 0 is no longer dataset 0's color. A continuous hue + # colors the data from a colormap, not palette slots: unchanged. _fc_default_palette = None if (_fc_palette is None and line_colors is None and (_fc_hue is not None or forecast_cluster is not None)): @@ -12237,11 +12237,11 @@ def _update_dynamic_title(ctx, _fn=_dynamic_title): title_kwargs=_title_kwargs) _frame_hooks.add_internal(_update_dynamic_title) - # the colour-cycle slots this call's datasets take (what a later `ax=` + # the color-cycle slots this call's datasets take (what a later `ax=` # call into the same axes/figure/cell continues the palette from): # counted HERE, before the plotly branch below hands the palette to its # backend as explicit per-dataset ``color=`` entries, which would make - # every dataset look explicitly coloured (round 7) + # every dataset look explicitly colored (round 7) _palette_slots_taken = _palette_slots_consumed( len(xform), mpl_kwargs, line_colors, draw_fmt, category_colored=hue is not None or cluster is not None @@ -12260,12 +12260,12 @@ def _update_dynamic_title(ctx, _fn=_dynamic_title): "title_color= as a callable is matplotlib-only: the " "plotly backend builds every animation frame up front and " "has no per-frame context to call it with. Pass a LIST of " - "colours (one per title segment) for backend='plotly'.") + "colors (one per title segment) for backend='plotly'.") if _legend_recolor is not None and _final_legend_entries is None: raise NotImplementedError( - "legend_colors= as a plain colour list recolours the " + "legend_colors= as a plain color list recolors the " "legend handles matplotlib builds; the plotly backend has " - "no separate legend handles to recolour (its legend " + "no separate legend handles to recolor (its legend " "swatches come from the traces themselves). Pass " "legend_colors=[(label, color), ...] to define the " "entries outright for backend='plotly'.") @@ -12290,13 +12290,13 @@ def _update_dynamic_title(ctx, _fn=_dynamic_title): # (`ax=`): the palette slots the calls drawn THERE already # took (a cell keeps its own count, like a matplotlib axes of its # own; Codex round 3). Read for EVERY call -- the count is written - # back below for every call -- not only for one that colours from + # back below for every call -- not only for one that colors from # the cycle: a pinned ``color=`` or categorical ``hue=`` call used # to skip the read and write the count back as its own zero, so # the next ordinary call restarted the palette (round 8; the # matplotlib `ax=` path keeps the axes' count across such calls) _plotly_palette_offset = 0 - # ...and the COLOURS those slots took (`_palette_continuation` + # ...and the COLORS those slots took (`_palette_continuation` # fills the gaps of an evenly re-sampled palette with them) _plotly_palette_used = None if _plotly_into is not None: @@ -12316,7 +12316,7 @@ def _update_dynamic_title(ctx, _fn=_dynamic_title): _plotly_palette_offset = int( _meta.get('hyp_datasets_drawn', 0)) _plotly_palette_used = _meta.get('hyp_palette_used') - # the palette colours this call's cycle-coloured datasets take, + # the palette colors this call's cycle-colored datasets take, # recorded below for the next `ax=` call into the same figure/cell _palette_taken_colors = [] if "color" not in mpl_kwargs: @@ -12333,16 +12333,16 @@ def _update_dynamic_title(ctx, _fn=_dynamic_title): palette, len(xform), _cycle_offset, _plotly_palette_used if _cycle_offset else None) _palette_taken_colors = _palette_colors[:_palette_slots_taken] - # a colour letter in fmt= ('r-', ['g--', 'b:']) colours its + # a color letter in fmt= ('r-', ['g--', 'b:']) colors its # dataset, exactly as on matplotlib, where the letter beats the - # axes' colour cycle (an explicit color=/hue= is the other + # axes' color cycle (an explicit color=/hue= is the other # branch of this `if`, and still wins over the letter on both - # backends). A lettered dataset consumes no colour-cycle slot + # backends). A lettered dataset consumes no color-cycle slot # there either, so here the unlettered datasets take the - # palette colours in order, past the ones an earlier call into + # palette colors in order, past the ones an earlier call into # the same figure/cell already used (1.1 release review, round # 6: plotly drew every fmt-lettered dataset in the palette - # colour, on the single-axes path, animated, and per panel). + # color, on the single-axes path, animated, and per panel). _fmt_letters = [ _fmt_color_letter(draw_fmt[_i]) if _i < len(draw_fmt) else None for _i in range(len(xform))] @@ -12378,7 +12378,7 @@ def _plotly_before_show(drawn): # the same run -> dataset -> rows mapping the matplotlib updaters # pace their reveal with, so neither backend re-derives it ownership=_ownership, - # ...and the same reveal schedule its per-frame forecast colours + # ...and the same reveal schedule its per-frame forecast colors # come from (Decision R3) forecast_reveal=_reveal, fmt=draw_fmt, @@ -12463,13 +12463,13 @@ def _plotly_before_show(drawn): forecast_labels=_forecast_labels, forecast_datasets=_model_forecast_owner, # what a later `ax=` call continues the palette - # from (see the colour block above) -- recorded on EVERY + # from (see the color block above) -- recorded on EVERY # figure, since the first call is the one composed into; only - # the datasets coloured from the cycle count + # the datasets colored from the cycle count # (`_palette_slots_consumed`) datasets_drawn=_plotly_palette_offset + _palette_slots_taken, - # ...and, before the figure is saved or shown, the colours of - # those slots beside the count (read back by the colour block + # ...and, before the figure is saved or shown, the colors of + # those slots beside the count (read back by the color block # above on the next `ax=` call) and the categorical legend's # order (`_rank_plotly_legend`) before_show=_plotly_before_show, @@ -12491,23 +12491,23 @@ def _plotly_before_show(drawn): sns.set_style(style="whitegrid") _palette_offset = 0 _palette_used = None - # this call's cycle colours: the palette's own sampling on a + # this call's cycle colors: the palette's own sampling on a # fresh axes (what `sns.set_palette` above gives it), continued # past an earlier call's slots on a reused one (below) _cycle = _palette_continuation(palette, len(xform)) if ax is not None and hasattr(ax, 'set_prop_cycle'): # a caller's axes (`ax=`, every `panels=` cell) captured - # ITS figure's colour cycle when it was created, so the + # ITS figure's color cycle when it was created, so the # rc-scoped palette above never reached it and datasets # drew in matplotlib's default C0/C1 cycle while the # returned `colors` and the plotly grid said hls (1.1 # release review, feature-tour 4/9.8). Set the axes' own # cycle to the palette -- CONTINUING it past the datasets # an earlier hypertools call drew there, so composing two - # calls on one axes does not draw both in the first colour + # calls on one axes does not draw both in the first color # (the plotly `ax=
` path keeps the same count). # `_palette_continuation` continues it without repeating an - # earlier call's colour, from the colours those slots took. + # earlier call's color, from the colors those slots took. if not (isinstance(palette, collections.abc.Mapping) or _looks_like_dataset_palettes(palette)): _palette_offset = int(getattr( @@ -12518,8 +12518,8 @@ def _plotly_before_show(drawn): ax.set_prop_cycle(color=_cycle or _palette_continuation( palette, 1)) if _color_scales_from_cycle: - # what each dataset is drawn in: its fmt= colour letter - # (which takes no cycle slot) or the next cycle colour + # what each dataset is drawn in: its fmt= color letter + # (which takes no cycle slot) or the next cycle color _cycle_iter = iter(_cycle) _drawn_colors = [] for _i in range(len(xform)): @@ -12577,7 +12577,7 @@ def _plotly_before_show(drawn): # the lines an earlier call left on a reused `ax=`: the # overlays below take their style from THIS call's lines only # (Codex round 4: every forecast on a thrice-drawn axes wore - # the first call's colour) + # the first call's color) _n_lines_before = len(ax.lines) if ax is not None else 0 fig, ax, data, line_ani = _draw( xform, @@ -12625,10 +12625,10 @@ def _plotly_before_show(drawn): legend_kwargs=_legend_kwargs, legend_entries=_final_legend_entries, legend_order=_legend_order, - # a plain colour list recolours the FINAL legend, so it is + # a plain color list recolors the FINAL legend, so it is # applied after the forecast/truth entries below when # there are any (Codex round 3: validated too early, it - # refused three colours for a legend that would list three) + # refused three colors for a legend that would list three) legend_colors=(None if _final_legend_entries is not None or raw_forecasts is not None or raw_truths is not None @@ -12649,7 +12649,7 @@ def _plotly_before_show(drawn): # as composing into a `hyp.subplots` cell does (round 7) ax._hyp_palette_offset = (_palette_offset + _palette_slots_taken) - # ...and the colours of those slots + # ...and the colors of those slots ax._hyp_palette_used = _extend_palette_used( _palette_offset, _palette_used, _cycle[:_palette_slots_taken]) @@ -12671,7 +12671,7 @@ def _plotly_before_show(drawn): _axis.set_tick_params(labelfontfamily=_font_stack) # predict=: overlay one forecast trace per input dataset - # (GH #169), styled to match its source line -- same colour, + # (GH #169), styled to match its source line -- same color, # linestyle and linewidth, at half its alpha # (`_forecast_style_from`). Added AFTER `_draw` has built the # legend @@ -12759,7 +12759,7 @@ def _plotly_before_show(drawn): and (raw_forecasts is not None or raw_truths is not None) and animate in (False, None, 'spin') and ax.get_legend() is not None): - # the deferred plain-colour-list recolouring (see the + # the deferred plain-color-list recoloring (see the # `legend_colors=` argument to `_draw` above) _recolor_overlay_legend( ax, _legend_recolor, @@ -12779,10 +12779,10 @@ def _plotly_before_show(drawn): # forecast for a dataset (too little history revealed), and # emptiness -- not alpha -- is how "nothing to draw" is said. if forecast_schedule is not None: - # Colours come from the trajectory lines as they stand + # Colors come from the trajectory lines as they stand # BEFORE any forecast artist is added: `ax.lines` grows as # this loop runs, so snapshot it first or artist i would take - # its colour from forecast i-1. (Same guard + # its color from forecast i-1. (Same guard # `_draw_forecast_overlays` opens with.) from .forecast import trail_alpha, trail_frames _src_lines = _observed_run_lines( @@ -12811,25 +12811,25 @@ def _plotly_before_show(drawn): # which drawn run this dataset's forecast continues: the # run holding its LAST observation, the same trace the # static overlay inherits from. Per FRAME the live artist - # re-takes the colour of whichever run is drawing the head + # re-takes the color of whichever run is drawing the head # (Decision R3); this is its build-time default. _fc_src = (_forecast_owner[_i] if _forecast_owner is not None and _i < len(_forecast_owner) else _i) # the SAME styling policy `_draw_forecast_overlays` uses - # (colour/linestyle/linewidth inherited from the observed + # (color/linestyle/linewidth inherited from the observed # trace, alpha halved), from the SAME helper -- so a # paused animation is indistinguishable from the static # plot and the two paths cannot drift. # Under a CONTINUOUS hue the observed trace has many - # colours and `_src_lines[_fc_src]` is the HIDDEN - # single-colour artist that drives the reveal -- its - # palette colour is drawn nowhere. Anchor on the final - # observed hue colour instead, exactly as the static + # colors and `_src_lines[_fc_src]` is the HIDDEN + # single-color artist that drives the reveal -- its + # palette color is drawn nowhere. Anchor on the final + # observed hue color instead, exactly as the static # overlay does (`_apply_multicolor_lines`). Before this, # a paused animation and a static plot of the same call - # showed the forecast in different colours, and the - # animated one continued a colour its trajectory never + # showed the forecast in different colors, and the + # animated one continued a color its trajectory never # visibly had. _fc_anchor = None if (line_colors is not None and _fc_src < len(line_colors) @@ -12843,7 +12843,7 @@ def _plotly_before_show(drawn): and _i < len(_forecast_overrides) else None), anchor_color=_fc_anchor) - # an explicit forecast_*= colour, which a continuous + # an explicit forecast_*= color, which a continuous # hue= must not repaint (`_apply_multicolor_lines`) from .forecast import override_has_color as _pins _fc_pinned = bool(_pins( @@ -12917,27 +12917,27 @@ def _plotly_before_show(drawn): and _final_legend_entries is None and ax.get_legend() is not None and _forecast_artists is None): - # the deferred plain-colour-list recolouring for the + # the deferred plain-color-list recoloring for the # animated modes (the static path does it below) _recolor_overlay_legend( ax, _legend_recolor, close_fig=None if _user_supplied_ax else fig) - # whether the user pinned this dataset's forecast colour + # whether the user pinned this dataset's forecast color # (`forecast_hue=`/`forecast_cluster=`/`forecast_palette=`); # an explicit grouping is resolved once from the full-history # forecasts and must stay fixed for every frame, so it wins - # over the per-frame head-run colour below. + # over the per-frame head-run color below. # A CONTINUOUS hue pins it too, for the same reason: the # forecast's identity is the hue value where its trajectory # ends, which does not change frame to frame. Decision R3's - # per-frame head-run colour remains correct for CATEGORICAL - # regrouping, where the run colour is what the viewer sees. + # per-frame head-run color remains correct for CATEGORICAL + # regrouping, where the run color is what the viewer sees. # `line_colors is not None` is DEFENSIVE, not load-bearing: # measured 2026-08-16, a continuous hue never regroups, so # `_reveal` above is None and `_run_colour` already returns # None on every frame. What actually gives an animated - # continuous-hue forecast the anchor colour is the + # continuous-hue forecast the anchor color is the # `anchor_color=` at its build site. The clause states the # policy where the policy is decided, so that widening # `_reveal` to non-regrouped animations cannot silently @@ -12945,9 +12945,9 @@ def _plotly_before_show(drawn): # is pinned by `test_a_continuous_hue_animation_is_NEVER_ # regrouped_into_runs`. from .forecast import override_has_color as _has_color - # a colour letter in forecast_fmt= pins the colour as an + # a color letter in forecast_fmt= pins the color as an # explicit forecast_hue=/palette= does (Codex round 4: - # 'ro:' forecasts were repainted in the head run's colour) + # 'ro:' forecasts were repainted in the head run's color) _override_colour = [ bool(_has_color(_forecast_overrides[_i] if _forecast_overrides is not None @@ -12967,7 +12967,7 @@ def _update_forecasts(ctx, _sched=forecast_schedule, _pinned=_override_colour, _sources=_model_forecast_owner): def _run_colour(dataset, frame): - """Decision R3: the colour of the run DRAWING the + """Decision R3: the color of the run DRAWING the head at `frame` -- the CURRENT frame for the live forecast, and the frame it was FIT at for a retained one, so crossing a category boundary does not repaint @@ -13106,7 +13106,7 @@ def _fill(art, pts): _marker_colors = _multicolor_line_colors( multicolor_hue, pre_interp_lengths, raw_xform, palette, is_rgb=multicolor_hue_is_rgb, - # the line colours above already warned about + # the line colors above already warned about # any non-finite hue observation warn_non_finite=False) _apply_multicolor_markers(ax, raw_xform, _marker_colors, @@ -13169,8 +13169,8 @@ def _hyp_frame_with_hooks(num, *fargs, # frame (the plot() docstring's own example does; 1.1 visual # review L11: that title rendered at y=484-500 on a 480 px # canvas) -- so a 3-D animation with neither keeps the exact - # same maximised canvas as before; and on ndims >= 3 so 2-D - # animations (whose default, non-maximised axes already leave + # same maximized canvas as before; and on ndims >= 3 so 2-D + # animations (whose default, non-maximized axes already leave # normal title room) are never touched. if (ax is not None and line_ani is not None and xform[0].shape[1] >= 3 @@ -13269,9 +13269,9 @@ def _hyp_frame_with_hooks(num, *fargs, if colorbar_info is not None: _cmap = colorbar_info.get('cmap') _cnorm = colorbar_info.get('norm') - # a panel without its own color= takes the colour of the + # a panel without its own color= takes the color of the # trajectory it accompanies (the first drawn dataset): an - # fmt= colour letter, else the resolved per-dataset colour + # fmt= color letter, else the resolved per-dataset color # (1.1 visual review L12: it fell back to matplotlib's # global 'C0' blue, beside a trajectory in the palette's # red) @@ -13557,7 +13557,7 @@ def _update_companions(ctx, _drawn=_panels_drawn): if line_ani is not None: from .hyper_animation import HyperAnimation _hyper_anim = HyperAnimation(fig, line_ani, frame_hooks=_frame_hooks) - # GH #285: the resolved colour scale, so a companion panel can + # GH #285: the resolved color scale, so a companion panel can # reuse hypertools' own mapping instead of rebuilding it (see # `_build_colors_info`). Same object the return_model bundle # exposes as bundle['colors']. @@ -13604,7 +13604,7 @@ def _build_colorbar_info(colorbar, hue, multicolor_hue, cluster, n_clusters, if multicolor_hue is not None and multicolor_hue.ndim == 1 and hue is None: vals = np.asarray(multicolor_hue, dtype=np.float64) # NaN/inf hue values are drawn in `NAN_COLOR` and EXCLUDED from the - # colour mapping (see the hue= docstring), so they must not reach + # color mapping (see the hue= docstring), so they must not reach # the range either: `np.min` over a NaN is NaN, and a colorbar (or # bundle['colors']) spanning nan..nan is a colorbar over nothing. finite = vals[np.isfinite(vals)] @@ -13641,7 +13641,7 @@ def _build_colorbar_info(colorbar, hue, multicolor_hue, cluster, n_clusters, ) # labels FIRST (GH #285): a `palette=` dict is keyed by category name, - # so the colours cannot be resolved until the group names are known. + # so the colors cannot be resolved until the group names are known. if isinstance(legend, list): labels = list(legend) elif (hierarchy_labels is not None @@ -13665,12 +13665,12 @@ def _build_colorbar_info(colorbar, hue, multicolor_hue, cluster, n_clusters, # the mixture-blend paths (cluster= or matrix hue, # animated) set an EXPLICIT per-group color list -- reuse it # verbatim so the colorbar swatches exactly match the drawn lines. - # Resolved through matplotlib's own colour parser rather than + # Resolved through matplotlib's own color parser rather than # `np.asarray(...)[:, :3]`, which only works for a list of numeric # RGB(A) tuples: a user-supplied `color=['red', 'green']` is a list # of NAMES, and indexing that 1-D array of strings raised # "IndexError: too many indices for array" (GH #285, found by the - # always-on colour-scale resolution `bundle['colors']` added there). + # always-on color-scale resolution `bundle['colors']` added there). from matplotlib.colors import to_rgba_array colors = to_rgba_array(explicit_colors)[:, :3] elif isinstance(palette, collections.abc.Mapping): @@ -13684,8 +13684,8 @@ def _build_colorbar_info(colorbar, hue, multicolor_hue, cluster, n_clusters, # in dataset/group order -- exactly what sns.set_palette (mpl) / # the per-trace sns.color_palette (plotly) assign when drawing. # `dataset_colors` (not `get_palette_colors`) so a PER-DATASET - # `palette=` list resolves to each dataset's own lead colour, the - # same colour the drawn trace gets (GH #285). + # `palette=` list resolves to each dataset's own lead color, the + # same color the drawn trace gets (GH #285). colors = dataset_colors(palette, n_groups) # A trace labeled '_nolegend_' (e.g. every MultiIndex leaf and @@ -13718,7 +13718,7 @@ def _build_colorbar_info(colorbar, hue, multicolor_hue, cluster, n_clusters, def _build_colors_info(hue, multicolor_hue, cluster, n_clusters, xform, mpl_kwargs, legend, palette, hue_group_labels=None, hierarchy_labels=None, legend_entries=None): - """The RESOLVED colour scale this figure draws with (GH #285). + """The RESOLVED color scale this figure draws with (GH #285). `_build_colorbar_info` already computes exactly this mapping, but only when a `colorbar=` was asked for -- and it raises when there is nothing @@ -13755,15 +13755,15 @@ def _build_colors_info(hue, multicolor_hue, cluster, n_clusters, xform, if info is None: if multicolor_hue is not None: # `categories` is documented as {label: rgb}: the legend - # entries carry the user's own colour specs ('k', '#ff00ff'), - # so normalise them the way every other path does. + # entries carry the user's own color specs ('k', '#ff00ff'), + # so normalize them the way every other path does. from matplotlib.colors import to_rgb return {'kind': 'blend', 'palette': palette, 'cmap': None, 'norm': None, 'vmin': None, 'vmax': None, 'colors': None, 'labels': None, 'categories': {str(label): tuple(to_rgb(color)) for label, color in (legend_entries or [])}} - # no grouping at all: one dataset, one colour + # no grouping at all: one dataset, one color colors = np.asarray(dataset_colors(palette, max(len(xform), 1))) return {'kind': 'discrete', 'palette': palette, 'cmap': ListedColormap(colors), 'norm': None, @@ -13919,7 +13919,7 @@ def _measurement_renderer(fig): Without this guard (release QC for the patch line that shipped as 1.1.0, found while verifying the 3-D title-margin fix's - "neighbours"): a measurement draw here is often + "neighbors"): a measurement draw here is often `fig`'s first draw ever, since `hyp.plot(..., show=False)` never draws the canvas itself -- and an unguarded first draw silently ran `FuncAnimation._init_draw()` -> a real, premature frame-0 update @@ -14176,7 +14176,7 @@ def _reserve_animated_3d_title_margin(fig, ax, pad_in=0.08, fontsize=None, n_lines=1): """Grow the figure so an animated 3-D plot's title has room to render. - `matplotlib_backend.animate_plot3D` deliberately maximises the 3-D axes + `matplotlib_backend.animate_plot3D` deliberately maximizes the 3-D axes to ``ax.set_position([0, 0, 1, 1])`` (full canvas -- see its own comment) so a rotating zoomed cube never overflows the axes viewport and clips at some rotation angles. `Axes.set_title()` draws ABOVE the @@ -14210,7 +14210,7 @@ def _reserve_animated_3d_title_margin(fig, ax, pad_in=0.08, fontsize=None, ABSOLUTE size it already had -- not a smaller, re-shrunk one -- at the BOTTOM of the now-taller canvas, leaving a blank strip above it for the title. This mirrors `_fit_right_legend`/`_add_right_colorbar` (same - file), which already grow the canvas rather than shrink the maximised + file), which already grow the canvas rather than shrink the maximized axes to make room for a legend/right-side colorbar, for the identical reason (see their docstrings). @@ -14348,7 +14348,7 @@ def _multicolor_line_colors(hue_src, orig_lengths, xform, palette, is_rgb=False, Non-finite hue values are drawn gray (`colors.mat2colors`); one ``UserWarning`` counting the non-finite ORIGINAL observations, attributed to the caller, is issued unless `warn_non_finite` is False (a second call - for the same hue, e.g. the marker colours of an ``'o-'`` combo). + for the same hue, e.g. the marker colors of an ``'o-'`` combo). hue_src holds one value (or one row) per ORIGINAL observation; the trajectories in xform have since been interpolated to a higher temporal @@ -14388,7 +14388,7 @@ def _multicolor_line_colors(hue_src, orig_lengths, xform, palette, is_rgb=False, else: # `mat2colors` warns about the non-finite rows it is handed -- here # the INTERPOLATED vertices, every one a NaN observation's - # neighbourhood touches (one NaN in 30 rows reported "61 + # neighborhood touches (one NaN in 30 rows reported "61 # observation(s)"), attributed to this module rather than the # caller. Silence it and say it once, below, about the # observations (1.1 release review). @@ -14440,18 +14440,18 @@ def _apply_multicolor_lines(ax, xform, line_colors, kwargs_list, else: _kept_forecasts.append(line) - # A continuous hue gives the observed data MANY colours, so "the same - # colour as its trace" resolves to the colour where the forecast starts: + # A continuous hue gives the observed data MANY colors, so "the same + # color as its trace" resolves to the color where the forecast starts: # the last segment of the trace it continues. # # Paired by the artist's DATASET tag, not by its position in # `_kept_forecasts`: position is only the right key while forecasts stay # one-per-dataset in dataset order, which anything that reorders or # filters them (`forecast_cluster=`, a per-dataset refusal) breaks - # silently -- each forecast would simply take a neighbour's colour. + # silently -- each forecast would simply take a neighbor's color. for _fi, _fc_line in enumerate(_kept_forecasts): if getattr(_fc_line, '_hyp_forecast_pinned', False): - # an explicit forecast_*= colour wins over the anchor, as + # an explicit forecast_*= color wins over the anchor, as # `_forecast_style_from` documents and plotly already draws continue _ds = getattr(_fc_line, '_hyp_forecast_dataset', _fi) @@ -14472,7 +14472,7 @@ def _apply_multicolor_lines(ax, xform, line_colors, kwargs_list, pts = xi[:, :3] if is_3d else xi[:, :2] segments = np.stack([pts[:-1], pts[1:]], axis=1) seg_colors = (ci[:-1] + ci[1:]) / 2.0 - # Per-trace opacity has to travel WITH the colours: these + # Per-trace opacity has to travel WITH the colors: these # collections replace the line artists, so an `alpha` left on the # discarded `Line2D` is simply lost. That is how a hierarchy's # level-derived alphas -- and a plain `hue=` + `alpha=` -- silently @@ -14516,9 +14516,9 @@ def _make_title_updater(titles, axes, font=None, title_kwargs=None, `on_frame=` callback whose only job was to restyle the title after this updater ran. `font` fixes the bug that a resolved `font=` reached the STATIC title but never a per-segment one; `title_kwargs` carries - size/weight/colour/y (a bare `font=` is only ever a family, so before + size/weight/color/y (a bare `font=` is only ever a family, so before this those could come from nothing but rcParams); `segment_colors` is - `title_color=`'s per-segment form -- one colour per segment, or a + `title_color=`'s per-segment form -- one color per segment, or a callable taking the frame context. All three default to None, in which case this makes the exact bare `axes.set_title(text)` call it always did. @@ -14567,7 +14567,7 @@ def _apply_multicolor_animation(ax, xform, line_colors, kwargs_list, `frame_hooks` is the `FrameHooks` registry the backend's updater just called ``record(artists=...)`` on. Its recorded artists are the HIDDEN - single-colour lines, so the collections drawn here are swapped in for + single-color lines, so the collections drawn here are swapped in for them after every frame: `dataset_fade=` and any `on_frame=` mutation then reach what is actually rendered. Without the swap, setting alpha on ``ctx.artists`` changed invisible artists and rendered nothing. @@ -14600,7 +14600,7 @@ def _linewidth(i): # also ride along in **kwargs_list[idx] and collide) and pass it # explicitly to ax.plot. Reading it back off kwargs_list here found # nothing and silently fell through to rcParams['lines.linewidth'], - # so every animated multicolour collection rendered at 1.5 regardless + # so every animated multicolor collection rendered at 1.5 regardless # of what the caller asked for. Reading the artist also guarantees the # overlay always matches the artist it replaces. if i < len(head_lines): @@ -14823,12 +14823,12 @@ def _apply_multicolor_markers(ax, xform, point_colors, kwargs_list, _kept_forecasts.append(line) # ...and, as in `_apply_multicolor_lines`, re-anchor each kept forecast - # on the colour its own trace ENDS in (F14). This loop used to exist only + # on the color its own trace ENDS in (F14). This loop used to exist only # on the line path, so a MARKER-only fmt drew the forecast in the - # per-dataset palette colour of an artist that was just removed -- and + # per-dataset palette color of an artist that was just removed -- and # since plotly anchors unconditionally (`_hue_anchor_color`, applied at # every trace's build regardless of fmt), the two backends drew the same - # forecast in different colours for exactly `fmt='o'` (measured, at every + # forecast in different colors for exactly `fmt='o'` (measured, at every # `ndims`: matplotlib rgb(59,82,139) vs plotly rgb(72,38,119) for the # first trace of a viridis column hierarchy). Same dataset-tag keying and # same reason as the line path: position breaks as soon as anything @@ -14836,7 +14836,7 @@ def _apply_multicolor_markers(ax, xform, point_colors, kwargs_list, # refusal). for _fi, _fc_line in enumerate(_kept_forecasts): if getattr(_fc_line, '_hyp_forecast_pinned', False): - # an explicit forecast_*= colour wins over the anchor, as + # an explicit forecast_*= color wins over the anchor, as # `_forecast_style_from` documents and plotly already draws continue _ds = getattr(_fc_line, '_hyp_forecast_dataset', _fi) @@ -14855,10 +14855,10 @@ def _apply_multicolor_markers(ax, xform, point_colors, kwargs_list, ms = float(tkwargs.get('markersize') or plt.rcParams['lines.markersize']) s = ms ** 2 # scatter sizes are areas in points^2 - # the trace's alpha= travels WITH the per-point colours, as on the + # the trace's alpha= travels WITH the per-point colors, as on the # line path (`_apply_multicolor_lines`): the scatter replaces the # marker artist the alpha was set on, so hue= + alpha=0.7 markers - # drew fully opaque while the same plot without hue= honoured it + # drew fully opaque while the same plot without hue= honored it # (1.1 release review) _alpha = tkwargs.get('alpha') if _alpha is not None: diff --git a/hypertools/plot/plotly_backend.py b/hypertools/plot/plotly_backend.py index f96aa68e..dcdca9cb 100644 --- a/hypertools/plot/plotly_backend.py +++ b/hypertools/plot/plotly_backend.py @@ -66,27 +66,27 @@ def _normalize_scatter3d_alpha(trace, inherited_mode=None, *, frame=False): - """Keep a Scatter3d's hue when its colours carry transparency. + """Keep a Scatter3d's hue when its colors carry transparency. - Plotly's WebGL line/marker path composites an ``rgba(...)`` colour - without premultiplying it, so a translucent colour ADDS to the white + Plotly's WebGL line/marker path composites an ``rgba(...)`` color + without premultiplying it, so a translucent color ADDS to the white background instead of blending with it: steelblue at alpha 0.5 renders as (197, 255, 255), a pale cyan, rather than (162, 192, 217) (notebook visual review 2026-09; 1.1 release review). The trace-level `opacity` blends correctly, so: - * UNIFORM alpha (every active colour the same) moves to `opacity` - verbatim, with the colours made opaque -- true translucency. + * UNIFORM alpha (every active color the same) moves to `opacity` + verbatim, with the colors made opaque -- true translucency. * NONUNIFORM alpha (a translucent line with opaque markers, per-vertex alpha, ...) cannot be one `opacity`. The largest alpha becomes the - trace `opacity`, and every colour is first composited over the white + trace `opacity`, and every color is first composited over the white paper (`_blend_toward_white`, the rule this module's Mesh3d surfaces use) by its share ``alpha / max_alpha`` of it. Over white the result - is exactly the requested colour; what it cannot express is a + is exactly the requested color; what it cannot express is a lower-alpha part showing ANOTHER trace through it at its own lower opacity -- the price of drawing the right hue. - Only active components participate: an unused marker colour must not + Only active components participate: an unused marker color must not prevent correcting a line. This operation is idempotent and also accepts partial frame traces. """ @@ -126,7 +126,7 @@ def _normalize_scatter3d_alpha(trace, inherited_mode=None, *, frame=False): obj.color = color trace.opacity = (1 if trace.opacity is None else trace.opacity) * top return - # nonuniform: opacity = the largest alpha, each colour pre-blended + # nonuniform: opacity = the largest alpha, each color pre-blended # toward white by its own share of it for obj, color, values in components: scalar = isinstance(color, str) @@ -1079,7 +1079,7 @@ def _compose_scope_traces(into): def _rgb_triplet(color): - """The ``(r, g, b)`` of a plotly colour string, opacity dropped (an + """The ``(r, g, b)`` of a plotly color string, opacity dropped (an ``rgba(...)``/``rgb(...)`` string as `_to_plotly_color` builds; any other spelling is returned as itself).""" text = str(color).strip() @@ -1090,7 +1090,7 @@ def _rgb_triplet(color): def _rgba_with_alpha(color, alpha): - """`color` (any plotly colour string, typically the ``rgba(r,g,b,a)`` + """`color` (any plotly color string, typically the ``rgba(r,g,b,a)`` `_to_plotly_color` builds) with its alpha replaced by `alpha`.""" text = str(color).strip() if text.startswith(('rgba(', 'rgb(')): @@ -1106,12 +1106,12 @@ def _forecast_legend_traces(specs, ndims): `specs` is ``[(label, line, alpha[, mode, marker]), ...]``, one per forecast trace that carries a legend label (its model's name), in - trace order; `line` is the trace's ``line=`` dict (colour with the + trace order; `line` is the trace's ``line=`` dict (color with the forecast alpha baked in, width, dash), and `mode`/`marker` the trace's drawing mode and marker dict when `forecast_fmt=` added markers (`_forecast_marker`). Each entry wears the first such forecast's line style, - and its colour when every forecast under that label shares one (a - single dataset, or a `forecast_palette=` that colours by model); + and its color when every forecast under that label shares one (a + single dataset, or a `forecast_palette=` that colors by model); otherwise `forecast.FORECAST_LEGEND_COLOR` at the forecast's alpha -- the entry then stands for the model's dash, not for any one dataset. The traces carry ``meta['hyp_legend_entry'] =