Skip to main content

pyd3js-interpolate

PyPI version Python versions License CI Security

Python port of d3-interpolate.

Tracked version: upstream_lock.json (d3-interpolate@3.0.1).

What is d3-interpolate?

d3-interpolate provides interpolators: functions that map a parameter (t \in [0,1]) between two values (numbers, colors, dates, arrays, affine transforms, zoom views, and more). D3 uses these for transitions and animations; this package brings the same building blocks to Python (with DOM-free transform parsing).

What you get

  • 100% upstream export parity for the pinned d3-interpolate@3.0.1 (see the compatibility matrix and docs/UPSTREAM_API.md).
  • 100% line coverage for pyd3js_interpolate (enforced via --cov-fail-under=100 when running this package’s tests).
  • Pytest ports of the upstream Mocha tests, plus an optional vendored Mocha gate (-m upstream) after scripts/vendor_upstream.py and npm install.
  • Runnable docs: docs/USER_GUIDE.md examples are checked by the test suite (same pattern as pyd3js-array).
  • D3-style camelCase names on the package (e.g. interpolateRgb) and snake_case equivalents (e.g. interpolate_rgb).
  • DOM-free interpolateTransformCss / interpolateTransformSvg (no browser DOMMatrix or SVG DOM).

Install

From PyPI:

pip install pyd3js-interpolate

This pulls in pyd3js-color automatically.

Workspace development:

uv sync --group dev

Usage

import pyd3js_interpolate as d3

i = d3.interpolate(0, 10)
print(i(0.5))

c = d3.interpolateRgb("steelblue", "brown")
print(c(0.5))
5.0
rgb(118, 86, 111)

Compatibility matrix

Pinned upstream inventory: docs/UPSTREAM_API.md.

Legend:

  • [implemented]: ported for the pinned version; covered by Python tests (and optional upstream Mocha gate).
  • [missing]: reserved for upstream drift (should not appear for the pinned version).

Upstream exports (d3-interpolate@3.0.1)

  • interpolate — [implemented]
  • interpolateArray — [implemented]
  • interpolateBasis — [implemented]
  • interpolateBasisClosed — [implemented]
  • interpolateDate — [implemented]
  • interpolateDiscrete — [implemented]
  • interpolateHue — [implemented]
  • interpolateNumber — [implemented]
  • interpolateNumberArray — [implemented]
  • interpolateObject — [implemented]
  • interpolateRound — [implemented]
  • interpolateString — [implemented]
  • interpolateTransformCss — [implemented]
  • interpolateTransformSvg — [implemented]
  • interpolateZoom — [implemented]
  • interpolateRgb — [implemented]
  • interpolateRgbBasis — [implemented]
  • interpolateRgbBasisClosed — [implemented]
  • interpolateHsl — [implemented]
  • interpolateHslLong — [implemented]
  • interpolateLab — [implemented]
  • interpolateHcl — [implemented]
  • interpolateHclLong — [implemented]
  • interpolateCubehelix — [implemented]
  • interpolateCubehelixLong — [implemented]
  • piecewise — [implemented]
  • quantize — [implemented]

Python-only helpers

The module also exposes isNumberArray / is_number_array, snake_case interpolate_* aliases, interpolate_value, generic_array, and basis_fn for Python ergonomics (not separate names in upstream index.js).

Testing

# From repo root, or from this package directory (`uv run pytest` enforces 100% line coverage via pyproject.toml):
uv run pytest packages/pyd3js-interpolate/package_tests --cov=pyd3js_interpolate --cov-fail-under=100
uv run ruff format packages/pyd3js-interpolate
uv run ruff check packages/pyd3js-interpolate
uv run ty check packages/pyd3js-interpolate/src

Upstream Mocha suite (optional)

uv run python scripts/vendor_upstream.py
cd packages/pyd3js-interpolate/upstream/d3-interpolate && npm install
uv run pytest -m upstream packages/pyd3js-interpolate/package_tests

Use npm install --legacy-peer-deps if the vendored tree requires it (same as pyd3js-array).

Documentation

Stability notes

  • Numbers / truthiness: interpolators treat IEEE NaN like JavaScript (e.g. nogamma uses a JS-style “truthy difference” check).
  • interpolateNumberArray: accepts Python array.array, 1-D memoryview, numeric list / tuple (stored as float like JS number arrays), and None as a or b matching JS undefined / empty-buffer behavior; multi-dimensional or unsupported buffer formats are rejected.
  • interpolate / value.js: collections.abc.Mapping (not only dict) uses the object interpolator; interpolateNumber applies a JS-style unary-+ / ToNumber approximation (valueOftoString / overridden __str__, with a recursion cap). Dispatch uses ToNumber(b) to choose object vs number, matching value.js. Boxed booleans via valueOf coerce to 0/1 like JS.
  • interpolateObject: user-defined valueOf / toString methods on the class (not inherited from object alone) are included in the key set, similar to enumerable prototype fields in JS for…in.
  • Transforms: interpolateTransformSvg parses the SVG transform attribute with the same affine composer as CSS (not only a single matrix(...)), including rotate(angle cx cy) as translate(cx,cy) rotate(angle) translate(-cx,-cy) and skewY(angle) (alongside skewX). Decomposition follows d3’s six-parameter model (translate, rotate, skewX, scaleX, scaleY); a lone skewY is folded into that basis like a browser DOMMatrix decomposition, not re-emitted as a skewY(...) token in interpolateTransformCss / Svg.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyd3js_interpolate-0.1.0.tar.gz (86.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyd3js_interpolate-0.1.0-py3-none-any.whl (24.2 kB view details)

Uploaded Python 3

File details

Details for the file pyd3js_interpolate-0.1.0.tar.gz.

File metadata

  • Download URL: pyd3js_interpolate-0.1.0.tar.gz
  • Upload date:
  • Size: 86.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for pyd3js_interpolate-0.1.0.tar.gz
Algorithm Hash digest
SHA256 ddc6281dc76a5622bb59ef34c91172664a765fc426cd366a6cbdce06dcf5ce65
MD5 a694971572fcfc17633e261729b7960c
BLAKE2b-256 ca3cf2aeab3ba277ee62de0aeab41b27fd4fbde33c1e524d40914c827bb16bea

See more details on using hashes here.

File details

Details for the file pyd3js_interpolate-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for pyd3js_interpolate-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3f5042bfe1297b5eb6c7d2c6649244673989dc61e7decc32ce2494f8463c91e8
MD5 ed6b0da5f46351091e5b13eae540f090
BLAKE2b-256 fa53677c209a90d5410a8314894ce36d187e8215d15ff3048e1f91d0da2fc2a6

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 files

0.0.0

1 file

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page