# Third party notices

## Matplotlib

The `ticker` formatter and locator behavior in this repository is adapted from
the public Matplotlib v3.11.2 implementation, especially
`lib/matplotlib/ticker.py` and its ticker tests. The MoonBit code is a rewrite
that uses immutable layouts and MoonBit numeric/string APIs; it does not ship
the Python or NumPy implementation.

Matplotlib is Copyright (c) 2012- Matplotlib Development Team; All Rights
Reserved. The applicable Matplotlib license is reproduced in
[LICENSE-MATPLOTLIB](licenses/LICENSE-MATPLOTLIB). The license and this notice must be
retained with derivative distributions.

The remainder of this repository is distributed under the license in
[LICENSE](../LICENSE).

## TZif Engine

`ticker/date` links to `caijiewei295/tzif-engine` version 0.1.0 under the
Apache License, Version 2.0 (the same license text as [LICENSE](../LICENSE)).
It reuses the package's TZif v2/v3 loader and POSIX future-rule evaluator.
The dependency source is unmodified; its public types remain private to this
adapter. The module declares `moonbitlang/x` 0.4.46, also Apache-2.0.

## Rabbita frontend package

The JS-only [rabbita package](../rabbita/README.md) is part of the same
`Lampese/mathplotlib` module. It uses `moonbit-community/rabbita` 0.16.7 and
`Milky2018/xml` 0.5.0 through their public APIs. The unified dependency graph
also resolves `moonbitlang/async` 0.22.4, `moonbit-community/moonback` 0.8.5
and `moonbitlang/x` 0.5.1. Their installed package metadata declares
Apache-2.0; the license text is the same as [LICENSE](../LICENSE).
Dependency source is unmodified and not vendored into this repository.
Module installation resolves these dependencies; core plotting packages do
not import the browser component or expose UI types.

## IANA Time Zone Database test data

The test fixtures are compiled from IANA tzdata 2026e with tzcode 2026e.
The relevant zone data are in the public domain. Their license notice is
retained in [testdata/tzif/LICENSE](../testdata/tzif/LICENSE); origin, checksums,
and reproduction instructions are in [testdata/tzif/README.md](../testdata/tzif/README.md).
These test fixtures are compiled only into test executables.

## IANA Time Zone Database optional catalogue

`ticker/date/tzdb` distributes the standard IANA tzdata **2026e** Zone/Link
catalogue (primary regions, etcetera, factory and backward), compiled with
IANA tzcode 2026e `zic -b slim`. This data is in the public domain. The
original notice is retained in [ticker/date/tzdb/LICENSE](../ticker/date/tzdb/LICENSE).

The generated catalogue deduplicates identical TZif data, retains all 598
published names, and does not include the optional backzone/packrat data or
leap-second tables. Source archive and zone checksums and reproduction details
are in [the manifest](../ticker/date/tzdb/manifest.json) and
[the catalogue guide](../ticker/date/tzdb/README.md). The C compiler is used only
by the regeneration script; it is not a runtime dependency.

## python-dateutil recurrence interfaces

The optional RRule/RRuleSet occurrence-cache and iterator behavior is aligned
with `dateutil` **2.9.0.post0**, notably `rrulebase`, `rrule.replace` and the
`rruleset` cache-invalidation tests. The MoonBit implementation reuses this
project's own calendar, clock, timezone and UTC-merge helpers; no Python
runtime or dateutil package dependency is shipped.

The upstream Apache-2.0/BSD license notices are retained in
[LICENSE-DATEUTIL](licenses/LICENSE-DATEUTIL). The source reference is
[dateutil 2.9.0.post0 rrule.py](https://github.com/dateutil/dateutil/blob/2.9.0.post0/src/dateutil/rrule.py).

## Date duration and range behavior

`TimeDelta`, `num2timedelta(s)` and `drange` align with the fixed Matplotlib
v3.11.2 `dates.py` and its `test_dates.py`; the Matplotlib notice and license
above apply to this behavior rewrite. Integer normalization and half-even
float-day conversion were checked against CPython v3.11.0's datetime behavior;
no CPython C code or runtime is redistributed.

The checked-in numerical assertions were generated by executing only the
pinned Matplotlib helper AST with Python 3.12.14, NumPy 2.3.5 and dateutil
2.9.0.post0, never an installed Matplotlib version. Source hash, versions and
case counts are in [testdata/date_range_reference.json](../testdata/date_range_reference.json).
The optional regeneration script is not a runtime dependency.

## Date epoch behavior

`get_epoch`, `set_epoch`, epoch-relative conversion, and distant-date precision
correction align with the same fixed Matplotlib v3.11.2 helpers, including
their subsecond-epoch forward/inverse asymmetry. The project's validated UTC
ISO parser deliberately supports a documented subset of NumPy's string syntax.
It reuses the existing TZif Engine Gregorian calendar functions.

The independent epoch assertions execute the pinned helper AST with Python
3.12.14, NumPy 2.3.5 and dateutil 2.9.0.post0. The source hash and cases are in
[testdata/date_epoch_reference.json](../testdata/date_epoch_reference.json), with
reproduction instructions in [the reference guide](../testdata/date_epoch_README.md).
No Python runtime is needed by the library or its MoonBit tests.

## Concise date formatter

`ConciseDateFormatter` label levels, zero formats, shared date text, fractional
trimming, inverted-axis behavior, scalar/cursor labels and TeX string wrapping
are aligned with the fixed Matplotlib v3.11.2 `dates.py` and formatter tests.
The Matplotlib notice and license above apply to this rewrite.

Independent assertions execute the pinned formatter/helper AST with the same
reference Python, NumPy and dateutil versions. CPython ZoneInfo reads retained
IANA TZif fixtures; dateutil supplies the equivalent future POSIX reference.
Source/data hashes, inputs and results are in
[the reference manifest](../testdata/concise_date_reference.json); the
[reference guide](../testdata/concise_date_README.md) documents reproduction and
the port's empty-batch/format-vocabulary/TeX-rendering bounds.

## Automatic date formatter and date minor labels

`AutoDateFormatter` scale selection, rc defaults, callable dispatch, locator-unit
rebinding and date minor overlap filtering align with the same fixed Matplotlib
v3.11.2 `dates.py`, `axis.py`, `mpl-data/matplotlibrc` and tests. The Matplotlib
notice and license above apply to this behavior rewrite.

The original formatter, frequency-unit and overlap functions are independently
executed by the optional reference generator. Source hashes, configuration,
inputs and results are retained in
[testdata/auto_date_reference.json](../testdata/auto_date_reference.json);
[the reference guide](../testdata/auto_date_README.md) documents reproduction and
typed-callable/automatic-locator boundaries. No Python runtime is shipped.

## Automatic date locator

`AutoDateLocator` interval tables, calendar selection, multiples alignment,
frequency state, nonsingular limits and diagnostic conditions are aligned with
Matplotlib v3.11.2. Concrete tick generation reuses the existing recurrence,
year and microsecond locators. The Matplotlib license and notice above apply.

The optional independent generator executes the original `DateLocator`,
`AutoDateLocator`, `RRuleLocator`, `YearLocator`, `MicrosecondLocator` and
`rrulewrapper`, plus `ticker.MultipleLocator` and `_Edge_integer`, using the
pinned source hashes. Original dateutil and NumPy supply recurrence, calendar
difference and floating tick behavior. No installed Matplotlib is imported.
Source hashes, cases and reproduction are retained in
[the manifest](../testdata/auto_locator_reference.json) and
[the guide](../testdata/auto_locator_README.md). No Python runtime is shipped.

## Date converters

`DateConverter`, `ConciseDateConverter`, date AxisInfo defaults and rc dispatch
align with the same pinned Matplotlib v3.11.2 `dates.py`. The Matplotlib license
and notice above apply. The rewrite retains the pinned concise superclass's
interval-multiple reset. Typed DateTime/flat arrays replace dynamic Python
inputs; a generic units registry is not included in this slice.

The independent original-class assertions, hashes, inputs and results are in
[the manifest](../testdata/date_converter_reference.json), with reproduction and
scope in [the guide](../testdata/date_converter_README.md). Python, NumPy and
dateutil are used only by the optional generator and are not runtime dependencies.

## C locale date format directives

The date formatter's standard strftime directives align with the same pinned
Matplotlib DateFormatter delegation to Python datetime.strftime in the C locale.
Calendar arithmetic reuses this project's existing Gregorian helpers. CPython
v3.11.0 ISO-week and strftime-wrapper routines were inspected as behavior
references; no CPython C implementation is embedded by this change.

Original Matplotlib formatter assertions and the CPython datetime 400-year
calendar oracle are retained in [the manifest](../testdata/date_format_reference.json).
[The guide](../testdata/date_format_README.md) records source/runtime distinctions,
fixed four-digit year padding, reproduction and locale/platform boundaries.
The Matplotlib notice and license above apply to the behavior rewrite.

## General date-string parsing

The default dateutil 2.9.0.post0 lexer, YMD resolution, numeric/word selection,
Decimal-context handling, default-field construction and local-timezone logic
are rewritten in MoonBit for Matplotlib v3.11.2 datestr2num. The existing
[dateutil license](licenses/LICENSE-DATEUTIL) and Matplotlib notice/license apply.
Unicode 15.0.0 predicate ranges are generated from the reference CPython API;
Python is not a library runtime dependency.

The optional generators execute the fixed original parser classes and original
Matplotlib entry point. They retain source hashes, exact numbers, clock and
warning observations in the parser manifests. [The reference guide](../testdata/date_parser_README.md)
describes reproduction, controlled IANA bytes, CPython timezone profiles,
NumPy probe/mixed-aware behavior and typed input boundaries. Host file reads
reuse moonbitlang/x 0.4.46 (Apache-2.0); no custom C implementation is added.

## Default date timezone resolution

The timezone rc, _get_tzinfo, formatter/locator resolution timing and numeric
conversion follow the same pinned Matplotlib dates.py. Named TZif resolution
and GNU timezone strings reimplement dateutil 2.9.0.post0 gettz/tzfile/tzstr,
including its first compatibility block and relativedelta transition ordering.
The existing Matplotlib/dateutil licenses apply. The checked TZif engine and
host file adapter are reused; there is no new runtime dependency. Fixed-source
hashes, production slim/fat fixtures and reproduction instructions are in
[testdata/timezone_README.md](../testdata/timezone_README.md).

## Calendar-relative dates

RelativeWeekday and RelativeDelta constructors, calendar application, staged
normalization, difference construction and object arithmetic reimplement fixed
dateutil 2.9.0.post0 _common.py and relativedelta.py under the existing
[dateutil license](licenses/LICENSE-DATEUTIL). Float duration accumulation follows fixed
CPython 3.12.14 datetime semantics. Decimal rounding follows the correctly rounded
binary/decimal round behavior. MoonBit standard
BigInt/string operations are reused; no CPython C implementation is embedded.
Five original-source generators retain source hashes and constructor,
application, normalization, difference and object-operation observations in
[testdata/relative_delta_README.md](../testdata/relative_delta_README.md).

## Public recurrence wrapper and locator

RRuleWrapper and RRuleLocator reimplement the public pinned Matplotlib dates.py
classes using the existing MoonBit recurrence, calendar, timezone and clock
layers. Ordinal weekday and naive recurrence behavior follows dateutil
2.9.0.post0 rrule.py; tzstr local attachment follows tz/_common.py tzrangebase,
including its negative-DST behavior. Existing Matplotlib/dateutil licenses apply.
The independent original-source fixtures, source hashes, typed boundaries and
reproduction commands are documented in
[testdata/rrule_wrapper_README.md](../testdata/rrule_wrapper_README.md).
No new third-party runtime or C implementation is distributed.

Automatic recurrence selection also uses these public wrapper/locator layers.
The negative-DST UTC-to-wall conversion follows original tzrangebase.fromutc
and its subsequent utcoffset evaluation. The original-source transition cases
and existing custom-epoch fixtures are described in
[testdata/auto_locator_README.md](../testdata/auto_locator_README.md).

## Named yearly locator

YearLocator and automatic year selection reimplement the original Matplotlib
YearLocator alignment and raw construction-keyword behavior, sharing the public
recurrence layer. Naive host conversion follows fixed CPython 3.12.14
local_to_seconds/local_timezone_from_local probe order and calendar bounds.
No CPython C implementation or new runtime dependency is distributed. Source
hashes, original-class observations and reproduction commands are documented in
[testdata/year_locator_README.md](../testdata/year_locator_README.md).

## Named calendar and clock locators

MonthLocator, WeekdayLocator, DayLocator, HourLocator, MinuteLocator and
SecondLocator reimplement the fixed Matplotlib constructors and reuse the
existing recurrence adapter. The same-frequency clock selector pruning follows
dateutil rrule.__construct_byset, including constructor-stage empty-set errors
and the distinction between raw construction arguments and core selectors.
Original-class/helper observations and source hashes are recorded in
[testdata/named_locator_README.md](../testdata/named_locator_README.md).
No new dependency, Python runtime or C implementation is distributed.

## Checked recurrence iteration

Cross-field clock-cycle iteration errors follow dateutil's MINUTELY/SECONDLY
advance logic. The existing calendar/clock candidate model supplies the shared
reachability iterator; public checked queries, count and checked raw readers
reuse it. Original-source observations and typed cache/iterator boundaries are
recorded in [testdata/clock_iteration_README.md](../testdata/clock_iteration_README.md).
No Python lock implementation or new runtime dependency is distributed.

## Named microsecond locator

MicrosecondLocator reimplements the fixed Matplotlib date conversion and
MultipleLocator/_Edge_integer arithmetic, sharing the existing date grid and
recurrence date conversion. Floating divmod follows CPython/NumPy behavior;
mixed first-naive inputs retain NumPy's whole-minute offset truncation.
Original-class observations, pinned source hashes, numerical limits and
reproduction commands are in
[testdata/microsecond_locator_README.md](../testdata/microsecond_locator_README.md).
No upstream C implementation or additional runtime dependency is distributed.

## Numeric fixed-spacing locator

MultipleLocator reimplements the fixed Matplotlib ticker.MultipleLocator,
_Edge_integer and transforms._nonsingular behavior. Its shared internal tick
grid also supplies the date microsecond locator; the binary64 divmod operation
order follows the existing CPython/NumPy observations. Mutable typed adapters,
view-limit rc lookup and the existing axis/render chain supply the MoonBit
integration. The Matplotlib license and notice above apply. Source hashes,
reference generation and explicit typed/eager/autoscale boundaries are recorded
in [testdata/multiple_locator_README.md](../testdata/multiple_locator_README.md).
SVG tick visibility follows axis._update_ticks and
transforms._interval_contains_close after coordinate transformation; formatter
layout retains the full locator output before drawing is filtered.
No upstream C implementation or new runtime dependency is distributed.

## Named linear, index and fixed locators

LinearLocator, IndexLocator and FixedLocator follow their fixed Matplotlib
ticker class bodies and inherited locator range policies. Linear sampling
preserves the pinned NumPy linspace operation order; index grids follow the
fixed NumPy arange runtime. The FixedLocator reference executes the original
Matplotlib _api.check_shape body and observes mutable NumPy slice and shallow
copy aliasing directly. TickValues and LinearLocatorPresets provide the typed
MoonBit buffer and preset model, including signed, nested and zero-stride views.
Index fill follows the recorded Darwin arm64 NumPy binary profile, with a pure
MoonBit BigInt implementation of the observed single-rounding operation.
Axis binding, shared-axis removal and secondary-view observations execute the
original Axis, TickHelper, FigureBase and SecondaryAxis method bodies.
Additional references execute the original Bbox data update, Grouper,
GridSpec subplot creation and Axes sharing bodies to check raw data bounds
and surviving shared-axis ownership order.
Matplotlib's license and notice above apply;
the NumPy linspace source is used for behavioral reference, with no NumPy C
implementation distributed. Pinned hashes, reference cases, ownership and
typed scope are documented in
[testdata/named_numeric_locator_README.md](../testdata/named_numeric_locator_README.md).
No new third-party runtime or C dependency is introduced.

## Named MaxN and automatic numeric locators

MaxNLocator and AutoLocator follow the fixed Matplotlib class bodies,
scale_range, _Edge_integer and their nonsingular policies. AutoLocator shares
the MaxN implementation and captures the classic-mode flag at construction.
Classic default steps retain Int64 storage, while modern defaults use Float64;
the typed tick views preserve integer assignment and view/copy storage behavior.
Parameter, numerical and provider references execute the original classes and
Matplotlib validators. Physical tick-space behavior follows XAxis/YAxis and
FontProperties numeric size handling, with the documented fixed SVG point-unit
profile; this does not claim the entire font/rc/backend system.
The existing pure MoonBit NumPy-fill implementation is shared with IndexLocator;
the following array multiply/add stages retain their separate rounding order.
Matplotlib's license and notice above apply. Source hashes, alias/update rules,
typed and eager limits, reference observations and reproduction commands are in
[testdata/maxn_locator_README.md](../testdata/maxn_locator_README.md).
No additional runtime dependency or upstream C implementation is distributed.

## Named automatic minor and null locators

AutoMinorLocator and NullLocator follow the pinned Matplotlib class bodies,
rc validators, Axis minor-overlap and Null-group selection, shared-axis removal,
and secondary scale/view protocols. Independent references execute those source
AST bodies using the fixed development Python/NumPy runtime. The typed port
preserves integer tick storage, arbitrary-sized rounded indices, arange dtype
selection and separate multiply/add rounding using existing MoonBit primitives.
Observed randomized NumPy signed-zero representatives are documented separately
from deterministic finite-value comparisons. No upstream sorting network, C
implementation, Python runtime or additional third-party library is distributed.
Matplotlib's license and notice above apply. Pinned hashes, source observations,
typed boundaries and reproduction commands are in
[testdata/auto_minor_locator_README.md](../testdata/auto_minor_locator_README.md).

## Named logarithmic locator

LogLocator follows the pinned Matplotlib class and decade helpers, preserving
ordered updates, live owner providers, local/shared minpos and array/scalar
arithmetic distinctions. Independent references execute original locator,
Axis overlap, Bbox, LogTransform, complete autoscale/limit and boxplot bodies.
The scene integration reuses the existing artist collector and rendering chain.
Matplotlib's license and notice above apply. Pinned hashes, typed boundaries,
numeric verification status and reproduction commands are documented in
[testdata/log_locator_README.md](../testdata/log_locator_README.md).
No upstream C implementation, Python runtime or additional third-party library
is distributed.

## Named symmetric-logarithmic locator

SymmetricalLogLocator follows the fixed Matplotlib class, preserving its raw
parameter storage, Float64 arange reversal, zero/subdivision expansion, deferred
errors and inherited range policy. It reuses the portable mathematical primitives
documented for LogLocator and retains source-platform differences explicitly.
Scale numerical corrections follow original forward/inverse expression order.
Axis and secondary references execute original class and full transform-tree
bodies with a fixed numeric bbox and an explicit affine matrix-multiply sink;
they do not distribute Matplotlib's C geometry or drawing kernels.
Matplotlib's license and notice above apply. Evidence, numeric boundaries and
reproduction commands are in
[testdata/symlog_locator_README.md](../testdata/symlog_locator_README.md).
No new third-party runtime dependency is introduced.

## Named inverse-hyperbolic-sine locator

AsinhLocator and minimal Asinh geometry follow the pinned Matplotlib classes.
References execute original AST bodies; primitive mathematical expectations are
independent Decimal evaluations. The portable BigInt interval implementation
preserves correctly rounded binary64 values, with source-platform differences
retained explicitly. No upstream C hyperbolic implementation or new third-party
runtime is distributed. Matplotlib's license and notice above apply; scope and
reproduction are in [testdata/asinh_locator_README.md](../testdata/asinh_locator_README.md).

## Named probability locator

LogitLocator and minimal Logit geometry follow the pinned Matplotlib source
classes. Independent references execute the original locator, MaxN fallback,
Axis limit/overlap, autoscale and transform bodies; original and correctly rounded
primitive observations are retained separately. The two integer decimal powers
in MaxN scale_range now reuse the portable power implementation, correcting a
non-JS one-ULP grid-origin error; other MaxN arithmetic is unchanged. No
upstream C code or new third-party runtime is distributed. Matplotlib's license
and notice above apply. Explicit default/tight/clip-renderer boundaries and
reproduction are documented in
[testdata/logit_locator_README.md](../testdata/logit_locator_README.md).

## Named basic formatters

BaseFormatter and the named NullFormatter, FixedFormatter and FuncFormatter
follow the pinned Matplotlib v3.11.2 classes, preserving source operation order
and borrowed state within the documented numeric/String typed domain. Independent
references execute the complete original formatter classes and real API/deprecation
helpers. Matplotlib's license and notice above apply. These helpers are source
reference inputs, not a new Python/C runtime dependency.

## Named string formatters

FormatStrFormatter and StrMethodFormatter follow the pinned Matplotlib classes
and their original call order. References execute the complete original classes,
real API/deprecation helpers, CPython string.Formatter/native formatting and
NumPy scalar operations. Matplotlib's license and notice above apply.
Python Unicode15.0.0 printability ranges are generated from the fixed reference
API, as with the existing date parser predicates. Existing Moon core shortest
conversion and project BigInt rounding helpers are reused; no CPython C code,
NumPy implementation or new Python/C runtime is redistributed. Explicit typed
boundaries and reproduction are documented in
[testdata/string_formatter_README.md](../testdata/string_formatter_README.md).

## Named percentage formatter

PercentFormatter follows the pinned Matplotlib class and inherited object
protocol. Its references execute complete original formatter, axis, secondary
and frame methods with the real API/deprecation helpers. Matplotlib's license
and notice above apply. Existing project BigInt rounding, Unicode predicates
and portable logarithm helpers are reused; no new Python, NumPy or TeX runtime
is distributed. Typed domains and reproduction are documented in
[testdata/percent_formatter_README.md](../testdata/percent_formatter_README.md).

## Named scalar formatter

ScalarFormatter follows the complete pinned Matplotlib v3.11.2 class and its
inherited protocol. Independent references execute original RcParams, font,
axis, secondary and transform bodies. Matplotlib's license and notice above
apply. The fixed CPython locale.py is used as a native reference with explicit
numeric conventions; no Python runtime, font catalogs or locale database is
redistributed. NumPy's staged decimal-round behavior is implemented using
existing project numerical helpers rather than distributed NumPy C code.
Integer/fractional powers and logarithms reuse portable BigInt interval
primitives with independent mathematical references. Native affine inverse
coefficients and mathematical profile evidence are recorded separately;
no native LAPACK or compiled geometry kernel is distributed. Scope and
reproduction are in
[testdata/scalar_formatter_README.md](../testdata/scalar_formatter_README.md).

## Named engineering formatter

EngFormatter follows the complete pinned Matplotlib v3.11.2 class and its
ScalarFormatter ancestry. Matplotlib's license and notice above apply.
Independent references execute the original classes, real axis/draw/secondary
bodies and the fixed CPython 3.12.14 builtin numeric dictionary. Numeric hashing
and combined-table probe, deletion, growth and copy behavior are informed by
CPython v3.12.14 `Objects/dictobject.c` (SHA256
`2139caefe57c6659db766fdda5e53c57f0e42e9335227875756307acfcdb51dd`).
Existing Python notices apply; no Python or NumPy runtime is distributed.
Natural logarithms and powers reuse the project's directed BigInt mathematical
primitives, with actual native results retained separately. Native NaN address
hashes, font/locale discovery and GUI/Text/TeX rendering remain stated host
boundaries. Scope and reproduction are documented in
[testdata/eng_formatter_README.md](../testdata/eng_formatter_README.md).

## Named logarithmic formatter family

LogFormatter, LogFormatterExponent, LogFormatterMathtext and
LogFormatterSciNotation follow the complete pinned Matplotlib v3.11.2 classes
and original Formatter/cbook/transform protocol. Matplotlib's license and notice
above apply. Independent references execute complete original class and Axis
bodies, with fixed CPython/NumPy native observations retained separately from
the portable mathematical profile. Fractional powers, generated logical sets
and decimal text conversion reuse project BigInt/Unicode and Moon core
primitives. No CPython/NumPy implementation or runtime, GUI/font catalog or TeX
runtime is distributed by this change. Source and reproduction are documented
in [testdata/log_formatter_README.md](../testdata/log_formatter_README.md).

## Named probability formatter and CPython numeric protocols

LogitFormatter follows the complete pinned Matplotlib v3.11.2 class; the
Matplotlib notice and license above apply. Its specialized numeric-set and
NaN-tuple sorting protocols are adapted from CPython v3.12.14
[`Objects/setobject.c`](https://github.com/python/cpython/blob/v3.12.14/Objects/setobject.c)
and [`Objects/listobject.c`](https://github.com/python/cpython/blob/v3.12.14/Objects/listobject.c),
respectively. SHA256 values are
`e633e7ae4e427ecead8879965910e27427d34ae0fc5b956142bc337f741a367c`
and `5f33dd1d97bfcc33e60495011fad7d9d02587a966999f28c159971f31aa91531`.

Copyright (c) 2001-2023 Python Software Foundation; All Rights Reserved.
The complete upstream license is retained in [LICENSE-CPYTHON](licenses/LICENSE-CPYTHON).
Changes replace Python object pointers, reference counting, dynamic comparison
and C memory management with MoonBit numeric identities, arrays and checked
resource bounds. The set implements only reachable clear/add/lookup operations;
sorting is specialized to two distinct Float64 scalar fields, retaining the
original comparison sequence for NaN. The translated protocols are distributed
with their source attribution; no Python runtime or NumPy implementation is
distributed. Independent references execute actual builtin set/sorted and
original Matplotlib/Axis bodies. Scope and reproduction are in
[testdata/logit_formatter_README.md](../testdata/logit_formatter_README.md).

## NumPy object-distance sorting protocol

The probability formatter's object-distance sorter is adapted from NumPy
v2.3.5's generic quicksort/introsort, heapsort fallback and object-comparison
protocol. The original sorting code is attributed by NumPy to Charles R.
Harris for numarray. Copyright (c) 2005-2025, NumPy Developers; All rights
reserved. The NumPy BSD license is retained in [LICENSE-NUMPY](licenses/LICENSE-NUMPY).
The specialized port replaces C byte buffers and dynamic object pointers with
MoonBit ScalarNumber arrays, preserving comparison order and NaN behavior.
It distributes no NumPy runtime, extension module or C backend. Fixed source
hashes and actual np.sort(dtype=object) evidence are recorded with the D34
object-sort reference.

D35 的显式 scale 默认安装根据同一固定 Matplotlib v3.11.2 的 scale.py、axis.py、
axes/_base.py、gridspec.py、cbook.py、figure.py、artist.py 与 ticker.py 行为以 MoonBit
重写；来源哈希及执行完整原源方法的独立参考见
[testdata/scale_defaults_README.md](../testdata/scale_defaults_README.md)。既有 Matplotlib
许可证适用；本片没有加入新的外部运行时或分发 Python/NumPy。

D36 的构造与 clear 生命周期继续依据同一固定 Matplotlib v3.11.2 原源以 MoonBit 重写。
完整 Axis/Axes clear、共享排序与尾部 limits 原方法的独立执行、哈希和宿主边界见
[testdata/initial_clear_README.md](../testdata/initial_clear_README.md)。没有增加新的分发依赖。

D37 的 numeric autoscale、lazy view 和缓存 dataLim/relim 继续依据固定 Matplotlib v3.11.2
原源以 MoonBit 重写。新增独立原源执行器保留原始行为与运行时 hash，controlled host 和
数值边界见 [testdata/autoscale_README.md](../testdata/autoscale_README.md)。既有 Matplotlib
及 NumPy 许可声明继续适用，没有新的分发依赖。

D38 的内建 Date/Category 单位、逐槽默认安装与共享回调继续依据固定 Matplotlib v3.11.2
的 units.py、category.py、axis.py、dates.py、ticker.py 与 axes/_base.py 行为以 MoonBit 重写。
完整原源独立执行、SHA256、宿主与 typed 边界见
[testdata/units_lifecycle_README.md](../testdata/units_lifecycle_README.md)。既有 Matplotlib 与
NumPy 许可证继续适用；无新的分发依赖。

D39 的 Line 原始输入、强制单位回算及逐 Line 错误顺序依据同一固定 Matplotlib v3.11.2
的 lines.py、artist.py、axis.py、axes/_base.py 与 transforms.py 行为以 MoonBit 重写。
独立参考执行完整所选原方法，并复用原 units/category/date、共享组和回调；数值 Path
存储等宿主与 public lazy Line API 边界明确记录于
[testdata/line_units_README.md](../testdata/line_units_README.md)。Matplotlib 许可保留在
[LICENSE-MATPLOTLIB](licenses/LICENSE-MATPLOTLIB)；没有加入新的分发运行时。

D40 的次坐标轴默认安装、独立视图、父 scale 缓存和数值绘制阶段依据同一固定
Matplotlib v3.11.2 的 axes/_secondary_axes.py、axis.py、scale.py、ticker.py 与
transforms.py 以 MoonBit 重写。完整所选原体执行、SHA256、物理上下文和图形宿主
边界见 [testdata/secondary_lifecycle_README.md](../testdata/secondary_lifecycle_README.md)。
既有 Matplotlib 与 NumPy 许可继续适用；没有新增分发运行时。

D41 的 SecondaryAxis 函数替换、identity reset 和缓存/部分失败行为继续依据同一固定
Matplotlib v3.11.2 的完整 axes/_secondary_axes.py 与既有 Axis/scale 原源以 MoonBit
重写。46个源观察、动态参数边界与图形宿主见
[testdata/secondary_functions_README.md](../testdata/secondary_functions_README.md)。
没有新增分发依赖；既有 Matplotlib 与 NumPy 许可声明继续适用。

D42 的次轴数值位置、独立对齐和定位绘制阶段继续依据固定 Matplotlib v3.11.2 的
axes/_secondary_axes.py、axes/_base.py、transforms.py 与既有 Axis/scale 原源以 MoonBit
重写。完整原体执行、来源哈希、56 条分项观察及空图形宿主边界见
[testdata/secondary_position_README.md](../testdata/secondary_position_README.md)。
无新增分发依赖；既有 Matplotlib 与 NumPy 许可声明继续适用。

D43 的次轴位置仿射、blend 失败状态和已安装 locator 快照继续依据固定 Matplotlib
v3.11.2 的完整 axes/_secondary_axes.py、transforms.py 与既有数值宿主以 MoonBit 重写。
原源哈希、52 条记录及不可变仿射桥边界见
[testdata/secondary_transform_README.md](../testdata/secondary_transform_README.md)。
没有新增分发依赖；既有 Matplotlib 与 NumPy 许可声明继续适用。

D44 的公开 Line 数据句柄、延迟缓存与原始/处理后视图协议继续依据同一固定
Matplotlib v3.11.2 的 lines.py、artist.py、axes/_base.py 及既有单位原源以 MoonBit
重写。25 组原源记录、6 条 source-only 记录与受控数值 Path 宿主边界见
[testdata/line_data_README.md](../testdata/line_data_README.md)。
没有新增分发依赖；既有 Matplotlib 与 NumPy 许可声明继续适用。

D45 的稳定 Line 句柄移除与 clear/delaxes 区别继续依据同一固定 Matplotlib v3.11.2 的
artist.py、axes/_base.py、figure.py 和既有 Line 缓存原源以 MoonBit 重写。完整方法执行、
15 条观察及 source-only 查询/重接入边界见
[testdata/line_remove_README.md](../testdata/line_remove_README.md)。
没有新增分发依赖；既有 Matplotlib 与 NumPy 许可声明继续适用。

D46 的 Line 可见性和延迟绘制早退继续依据固定 Matplotlib v3.11.2 的 artist.py、
lines.py 与既有单位原源以 MoonBit 重写。完整 Line.draw 控制体、15 条原源操作和
no-style/no-marker 呈现宿主边界见
[testdata/line_visible_README.md](../testdata/line_visible_README.md)。
没有新增分发依赖；既有 Matplotlib 与 NumPy 许可声明继续适用。

D47 的 relim 可见性过滤继续依据固定 Matplotlib v3.11.2 的 axes/_base.py、
artist.py、transforms.py 与 Line 原源以 MoonBit 重写。9 条完整原源记录、空范围的
minpos 元数据与晚失败边界见
[testdata/relim_visible_README.md](../testdata/relim_visible_README.md)。
没有新增分发依赖；既有 Matplotlib 与 NumPy 许可声明继续适用。


D48 的 Line 线宽、比较与赋值顺序依据固定 Matplotlib v3.11.2 的 lines.py 以 MoonBit
重写。独立原源参考另执行 backend_bases.py、backends/backend_svg.py 和 colors.py 的
完整相关方法，记录 28 条 setter 观察与 11 条 source-only SVG 样式结果。固定文件
哈希、完整方法与受控宿主边界见
[testdata/line_width_README.md](../testdata/line_width_README.md)。
没有新增分发依赖；既有 Matplotlib 与 NumPy 许可声明继续适用。


D49 的 Line String color 验证与晚解析依据固定 Matplotlib v3.11.2 的 lines.py、
colors.py 和 `_color_data.py` 以 MoonBit 重写。固定命名表及其原始别名/优先顺序
用于生成私有 MoonBit 精确查表；参考脚本执行完整相关方法和完整 solid/no-marker
Line.draw 控制体。固定哈希、来源、观察记录与源宿主边界见
[testdata/line_color_README.md](../testdata/line_color_README.md)。
没有新增分发依赖；既有 Matplotlib 与 NumPy 许可声明继续适用。


D50 的 Line None/Double alpha 校验、相等不赋值及颜色 alpha 覆盖依据固定
Matplotlib v3.11.2 的 artist.py、lines.py 与 colors.py 以 MoonBit 重写。独立参考
执行完整相关方法，保留 59 条原源观察及原始缓存符号结果。固定哈希、完整方法
及受控 callback/renderer/cache 边界见
[testdata/line_alpha_README.md](../testdata/line_alpha_README.md)。
没有新增分发依赖；既有 Matplotlib 与 NumPy 许可声明继续适用。

D51 的 String linestyle、捕获虚线模板、线宽重算和晚期 GC 校验依据同一固定
Matplotlib v3.11.2 的 lines.py、cbook.py、rcsetup.py、backend_bases.py 与
backends/backend_svg.py 以 MoonBit 重写。独立参考保留完整原源结果，来源与宿主
边界见 [testdata/line_style_README.md](../testdata/line_style_README.md)。

私有线型拼写建议和浮点求和分别改写自 CPython v3.12.14 的
[`Lib/difflib.py`](https://github.com/python/cpython/blob/v3.12.14/Lib/difflib.py)
与 [`Python/bltinmodule.c`](https://github.com/python/cpython/blob/v3.12.14/Python/bltinmodule.c)。
固定 SHA256 分别为
`3eb2d371b4a171b063921de6bbf115108bc39de8bf72866315868ce2599213b7`
和 `368b677db85bd846fc85271d6e7170ee8e529230bd1ea352d16ccef0a75787e0`。
Copyright (c) 2001-2023 Python Software Foundation; All Rights Reserved.
完整许可保留于 [LICENSE-CPYTHON](licenses/LICENSE-CPYTHON)。改动将通用 Python matcher 缩为
固定十一种线型、无 junk 的 Unicode 匹配，使用 MoonBit 数组与匹配块计数；浮点
求和仅移植 Double 序列的初值、Neumaier 补偿及有限补偿终合，不含动态对象、引用
计数或 C 内存管理。没有新增分发运行时。

D52 的 Line drawstyle、延迟路径缓存和三种阶梯顶点展开依据固定 Matplotlib v3.11.2
的 lines.py、cbook.py、path.py 与既有 Axis/Axes 单位/范围行为以 MoonBit 重写。
独立参考执行原始所选完整方法，path.py 官方源码 SHA256 为
`5c726cf2765c7c4549de79d3327adabd5613dba0dd4e9bf208fafb48799ee12f`。
默认/阶梯 Path 实际别名、物理 ndarray 元数据和原源警告完整保留，具体边界见
[testdata/line_drawstyle_README.md](../testdata/line_drawstyle_README.md)。
既有 Matplotlib 与 NumPy 许可继续适用；没有新增分发运行时或编译扩展。

D53 的 Line gapcolor、is_dashed、逆虚线与两笔描边顺序依据固定 Matplotlib v3.11.2
的 lines.py、colors.py 和 backend_bases.py 以 MoonBit 重写。独立参考执行完整相关
方法并保留 54 条实际原源观察，完整原 payload SHA256 为
`b87e5f99fc2da8a586b0b27926b6fbbae31b918216cca456835335db6e0924b7`。
来源、方法哈希和宿主边界见
[testdata/line_gapcolor_README.md](../testdata/line_gapcolor_README.md)。
既有 Matplotlib 与 NumPy 许可继续适用，没有新增分发运行时。

D54 的 Line set_dashes 数值快照输入、空序列实线分支与自定义虚线捕获依据固定
Matplotlib v3.11.2 lines.py 的完整原始方法及既有 helper 以 MoonBit 重写。
set_dashes 方法体 SHA256 为
`f2772184b7ba726d20e195e36ecee68a06cb039815f8882bcb7886e80e53f64b`。
54 条完整实际原源记录和不可变 tuple/原生可变 list 的映射边界见
[testdata/line_dashes_README.md](../testdata/line_dashes_README.md)。
既有 Matplotlib、NumPy 与 CPython 许可继续适用，没有新增分发运行时。
