Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
382 commits
Select commit Hold shift + click to select a range
e5afe84
feat(out/where): expose min/max out=/where=, extend the oracle, fix K…
Nucs Sep 18, 2026
989b246
test(out/where): strengthen the family-smoke assertions from one elem…
Nucs Sep 18, 2026
32162b6
fix(indexing): boolean PARTIAL-mask selection OWNS its result (owndat…
Nucs Sep 18, 2026
f319b65
fix(exceptions): raise NumPy's ValueError (not NumSharpException) for…
Nucs Sep 18, 2026
ba5c347
feat(collections): OrderedDict — lean lock-free insertion-ordered ind…
Nucs Sep 18, 2026
392b52c
feat(collections): ConcurrentPointingDict — experimental "pointing" v…
Nucs Sep 18, 2026
67f8f96
test(oracle): commit the np.ma masked-array differential corpus + clo…
Nucs Sep 18, 2026
9a1eeb7
fix(math): complex-input rejection raises NumPy's exact TypeError for…
Nucs Sep 18, 2026
2e205a1
fix(exceptions): IncorrectTypeException derives from TypeError so ufu…
Nucs Sep 18, 2026
3384a0b
feat(out/where): the last three ufunc gaps — left_shift/right_shift, …
Nucs Sep 18, 2026
7a262af
test(oracle): np.ma corpus pass 2 — deeper assertions (edge layouts +…
Nucs Sep 18, 2026
e84fd2f
test(oracle): coverage-expansion plan P0-P3 executed — instance/emath…
Nucs Sep 18, 2026
55a2a6a
test(oracle): dtype-spread validation — scan all oracles against NumS…
Nucs Sep 18, 2026
0398f30
docs(collections): propose ConcurrentOrderedDictionary for System.Col…
Nucs Sep 18, 2026
91d170d
Expand coverage inventory and dashboard scopes
Nucs Sep 18, 2026
cd4a4ec
Update .gitignore
Nucs Sep 18, 2026
2c1e402
build(submodule): add SciSharp/TensorSharp2 reference at refs/TensorS…
Nucs Sep 18, 2026
07c7b94
feat(indices): make np.indices/indices_sparse long-friendly (int[]/lo…
Nucs Sep 18, 2026
1dc1d35
docs: modernize C# array literals to collection expressions `[]` / tu…
Nucs Sep 18, 2026
4406760
test(indices): .NET-friendliness tests + docfx example coverage; fix …
Nucs Sep 18, 2026
f500350
docs: reorganize navigation and honor TOC expansion defaults
Nucs Sep 18, 2026
4deab50
Update main.js
Nucs Sep 18, 2026
538dd00
docs: normalize em-dashes to hyphens across docfx content
Nucs Sep 18, 2026
e0d6a81
refactor(ma): rename MaskedArray -> NDMaskedArray (ND* convention); n…
Nucs Sep 23, 2026
0467720
refactor(collections): *Dict -> *Dictionary rename completed, Concurr…
Nucs Sep 23, 2026
563fc3e
docs(collections): double-pass follow-ups to 5635182d - clone deviati…
Nucs Sep 23, 2026
74656f1
fix(ci): PR #631 green on all three OSes: argsort heap overrun, ARM64…
Nucs Sep 23, 2026
6d46a17
test(collections): prove 10 open bugs in OrderedDictionary + Concurre…
Nucs Sep 23, 2026
29f10f2
docs(collections): handover to revalidate and fix the 10 pinned order…
Nucs Sep 23, 2026
3bc9623
fix(ci): PR #631 macOS arm64 residue: NumPy's arm64 wheel fuses legac…
Nucs Sep 23, 2026
ea48e66
ci(interop): pin live NumPy's CPU dispatch below AVX-512 on the ubunt…
Nucs Sep 23, 2026
7a8b565
ci(interop): log the runner's vector ISA next to NumPy's effective di…
Nucs Sep 23, 2026
21d4c89
docs(interop): ONNX Runtime gap review - 13 probe-verified findings (…
Nucs Sep 23, 2026
f4d6b2a
wip(oracle): leak-audit coverage completion - inventory cross-referen…
Nucs Sep 23, 2026
873900b
fix(collections): OrderedDictionary - no lost updates (full fences), …
Nucs Sep 23, 2026
478b531
fix(collections): ConcurrentOrderedDictionary removals are comparer-e…
Nucs Sep 23, 2026
6f2ec47
wip(oracle): leak-audit session 2 - catalogue + property/field read g…
Nucs Sep 23, 2026
f8b25f7
fix(fuzz-soak): keep host-defined complex results out of the recomput…
Nucs Sep 23, 2026
f50913f
fix(ci): OpenBLAS verify scripts read captures via here-strings; `ech…
Nucs Sep 23, 2026
7e60327
fix(leaks): leak-audit completion - np.ma hand scopes, histogram [NDS…
Nucs Sep 23, 2026
3ac37d1
Merge branch 'leak-audit-completion' into journey4
Nucs Sep 23, 2026
afe8be8
ci(signing): fold verify-signing into the `test` job's ubuntu leg; th…
Nucs Sep 23, 2026
e81b728
ci(fuzz-soak): 1 fixed + 9 fresh random seeds (was 5 + 5); the split …
Nucs Sep 23, 2026
a325155
ci(interop): fold package-consumer-smoke into the interop-test job as…
Nucs Sep 23, 2026
cc1be54
ci(interop): fold the ONNX Runtime and ML.NET suites into interop-tes…
Nucs Sep 23, 2026
d1b89c1
fix(complex): np.abs(complex128) is NumPy's FUSED simd_cabsolute (was…
Nucs Sep 23, 2026
c243201
perf(casting): ToMuliDimArray<T> copies in one pass - SIMD strided/tr…
Nucs Sep 23, 2026
5463714
test(interop): arm64 NumPy fuses pocketfft's multiply-adds - rfft and…
Nucs Sep 23, 2026
51fb9c9
docs(fft): arm64 NumPy's pocketfft contraction PROVEN byte for byte (…
Nucs Sep 23, 2026
4231d2d
perf(casting): ToJaggedArray<T> in one pass - strided pointer walk, u…
Nucs Sep 23, 2026
6402196
test(perf): exact GC windows via young collections - BufferReleaseSwe…
Nucs Sep 24, 2026
5bc19d8
test(perf): concurrent-collection storms get a per-push CI budget (Co…
Nucs Sep 24, 2026
550b2ed
test(longindexing): 2.36 GB broadcast Add/Square materializations bac…
Nucs Sep 24, 2026
034b2be
docs(claude): "Keeping the suite fast" - never a full GC per measurem…
Nucs Sep 24, 2026
94c477f
test(oracle-perf): coverage gates share ONE header-only corpus survey…
Nucs Sep 24, 2026
e405ee9
test(perf): NpyMemmapTests release undisposed views with a YOUNG coll…
Nucs Sep 24, 2026
0c87022
build(test-perf): TieredPGO off for the three CI test hosts - NumShar…
Nucs Sep 24, 2026
9de61fc
test(perf): time-boxed collection race storms get calibrated per-push…
Nucs Sep 24, 2026
34f6f58
test(perf): lifetime/retention tests collect young when young is exac…
Nucs Sep 24, 2026
b30833b
test(perf): test hosts opt out of Windows efficiency-mode scheduling …
Nucs Sep 24, 2026
25cc7d7
docs(claude): "Keeping the suite fast" gains the turn-3 rules - Corpu…
Nucs Sep 24, 2026
b8109cb
test(perf): BarrierVolleys per-push partitions 300 -> 150 keys so no …
Nucs Sep 24, 2026
28fa9d7
perf(slice): slice notation parses through [GeneratedRegex] singleton…
Nucs Sep 24, 2026
a46259e
test(perf): stress consumers idle with Thread.Yield, not Thread.SpinW…
Nucs Sep 24, 2026
3e4a5a9
test(perf): Analyzer's ValuesStable gate collects young when young is…
Nucs Sep 24, 2026
25009dd
test(perf): RemoveSameKeys and TailPopsAndReAppends get per-push budg…
Nucs Sep 24, 2026
5ae3bf0
test(perf): MixedChaos per-push live set fits under the LOH threshold…
Nucs Sep 24, 2026
a54450b
test(perf): BufferReleaseSweep drains the earlier classes' backlog on…
Nucs Sep 24, 2026
fdd728e
docs(plans): numpy.polynomial delivery plan - 193 functions + 6 class…
Nucs Sep 24, 2026
801ddcb
docs(plans): numpy.polynomial engine choice, measured - typed C# kern…
Nucs Sep 24, 2026
a0d8d4e
test(perf): PhasedStorms per-push live set fits under the LOH thresho…
Nucs Sep 24, 2026
5da0c78
test(perf): PartitionedAllOps per-push live set fits under the LOH th…
Nucs Sep 24, 2026
99ac94e
test(perf): KeyOwnedOps caps its per-push keys at 4,096 / threads so …
Nucs Sep 24, 2026
618a3ce
test(perf): IndexPathReaders seeds 4,000 keys per push (golden 10,000…
Nucs Sep 24, 2026
b298ab7
test(perf): OrderPreservingChaos runs 5,000 ops per writer per push (…
Nucs Sep 24, 2026
6bc242f
docs(plans): numpy.polynomial engine = Tier-3A IL + NDIter typed emit…
Nucs Sep 24, 2026
c5b066c
test(perf): FullSurfaceChaos runs 5,000 ops per writer per push with …
Nucs Sep 24, 2026
c6f3cd5
test(perf): BarrierVolleys runs 500 ops per volley per push (was 1,00…
Nucs Sep 24, 2026
8da37f8
test(perf): OrderedChurn gets a per-push budget - 20 structural churn…
Nucs Sep 24, 2026
6b8e0b4
test(perf): Exp2_WithinTwoUlp checks the scalar entry point directly …
Nucs Sep 24, 2026
932b925
test(fix): Exp2_Scalar_Equals_Simd compares the vector kernel with th…
Nucs Sep 24, 2026
9957d7a
docs(claude): "Keeping the suite fast" gains the turn-4 rules - LOH-s…
Nucs Sep 24, 2026
e140097
feat(evaluate): NDExpr Phase 2 (M1) — flat float/complex Sum/Mean/Pro…
Nucs Sep 13, 2026
98bf7f9
feat(evaluate): NDExpr Phase 2 (M2) — axis float/complex Sum/Mean/Pro…
Nucs Sep 13, 2026
1c8a98e
feat(evaluate): NDExpr Phase 2 (M4a) — Any/All/CountNonzero/NanSum/Na…
Nucs Sep 13, 2026
e877506
test(evaluate): harden the M4a nan-reduction oracle — prove NanSum/Na…
Nucs Sep 13, 2026
30ad797
feat(evaluate): NDExpr Phase 2 (M4b) — Ptp/NanMin/NanMax fused reduct…
Nucs Sep 13, 2026
f3eb542
feat(evaluate): NDExpr Phase 2 (M4c-index) — ArgMax/ArgMin fused redu…
Nucs Sep 13, 2026
2f02d65
feat(evaluate): NDExpr Phase 2 (M4c-summation) — NanMean/Var/Std fuse…
Nucs Sep 13, 2026
eb76e57
feat(evaluate): NDExpr Phase 2 (M4c-average) — weighted np.average ov…
Nucs Sep 13, 2026
dcdd656
feat(evaluate): NDExpr Phase 2 (M5) — axis=None + keepdims flat reduc…
Nucs Sep 13, 2026
e39519b
fix(evaluate): normalize M5 flat delegating reduce to 0-d (size-1 nan…
Nucs Sep 13, 2026
6175a01
feat(evaluate): NDExpr Phase 4 (binary nodes) — the engine binary ufu…
Nucs Sep 13, 2026
4462122
docs(evaluate): record Phase 4.2 (binary nodes) in the ndexpr-evaluat…
Nucs Sep 13, 2026
bd0091f
feat(evaluate): NDExpr Phase 4.1a (unary nodes) — the engine unary uf…
Nucs Sep 14, 2026
bf16cdc
feat(evaluate): NDExpr Phase 4.1b (Rint) — the float-tier round-half-…
Nucs Sep 14, 2026
ab6b6b1
feat(evaluate): NDExpr Phase 4.1b (Real/Imag/Angle) — the complex→rea…
Nucs Sep 14, 2026
fc8be29
feat(evaluate): NDExpr Phase 4.1b (Cast) — the astype node, the first…
Nucs Sep 14, 2026
0fb51fd
feat(evaluate): NDExpr Phase 4.1b (Round(decimals)) — the last 4.1b n…
Nucs Sep 14, 2026
eb1921e
feat(evaluate): NDExpr Phase 4.3 (logical + Select/Clip) + 4.4 (compa…
Nucs Sep 14, 2026
fbef1c4
feat(evaluate): NDExpr Phase 4.5 (dtype=/casting=/order= keywords) — …
Nucs Sep 14, 2026
c5422cf
feat(evaluate): NDExpr Phase 4.5 (where= write mask) — bit-exact vs N…
Nucs Sep 14, 2026
b53a0cc
feat(evaluate): NDExpr Phase 5.1 — float16 arithmetic SIMD + the doub…
Nucs Sep 14, 2026
c9de59f
feat(evaluate): NDExpr Phase 6.3 — single-op trees delegate to the di…
Nucs Sep 14, 2026
3631fcc
feat(evaluate): NDExpr Phase 5.2 — mixed-width SIMD ("lane groups"), …
Nucs Sep 14, 2026
d3057b3
feat(evaluate): NDExpr C6 macro/decision combinators (38) — pure-comp…
Nucs Sep 14, 2026
7aba9b4
feat(evaluate): NDExpr C6 combinators — differential-fuzz oracle gram…
Nucs Sep 14, 2026
4a87527
perf(evaluate): cache the fused flat-reduction pairwise-sum kernel — …
Nucs Sep 14, 2026
30a35d1
perf(evaluate): drop the redundant per-child copy in fused np.average…
Nucs Sep 14, 2026
ee63986
perf(evaluate): NDExpr Phase 2 M3 — streaming (no-temp) exact Sum/Mea…
Nucs Sep 23, 2026
30dbfe0
perf(evaluate): NumPy's trivial loop for np.evaluate — skip NDIter fo…
Nucs Sep 23, 2026
3f22d30
perf(reduce): typed dense-block axis post-passes — SeedReduceIdentity…
Nucs Sep 23, 2026
0f78f6e
perf+fix(evaluate): stream the weighted Average (3.6-3.9x, NumPy-exac…
Nucs Sep 23, 2026
0f8819b
perf(evaluate): stream flat Any / All / CountNonzero through SIMD blo…
Nucs Sep 23, 2026
129fbab
perf+fix(evaluate): NumPy's own flat min/max reduction schedule, bit …
Nucs Sep 23, 2026
78692d9
perf(evaluate): stream the axis Any/All/CountNonzero bool folds — NPY…
Nucs Sep 23, 2026
ceac36f
perf(argmax): strides-driven engine axis argmax/argmin, NumPy's 64-bi…
Nucs Sep 23, 2026
1d79ce6
perf+fix(reduce): np.max / np.min / np.ptp (flat AND axis) and np.eva…
Nucs Sep 23, 2026
f8f91b3
perf(reduce): SLAB-mode max/min fold eight reduced indices per pass a…
Nucs Sep 23, 2026
de6333d
perf+fix(reduce): np.nanmax / np.nanmin (engine AND np.evaluate NanMa…
Nucs Sep 23, 2026
268d91f
perf(nanmax): the P rules' vector section is ONE order-free aligned f…
Nucs Sep 24, 2026
1336e36
test(reduce): ReadOnlyOutput_StillRaisesAndStaysUnchanged expects Num…
Nucs Sep 25, 2026
5754520
feat(polynomial): numpy.polynomial evaluation family (U3) - {p}val/va…
Nucs Sep 25, 2026
7351465
perf(casting): NDArray.ToArray<T> copies in one pass - per-layout SIM…
Nucs Sep 25, 2026
1855ea9
fix(random): Generator parity with NumPy 2.4.2 - integers bounds/size…
Nucs Sep 25, 2026
fd058f0
feat(coverage): per-API NumPy-oracle parity evidence - the coverage a…
Nucs Sep 25, 2026
c1e0feb
feat(random)!: MT19937 is a NumPy BitGenerator (SeedSequence seeding,…
Nucs Sep 25, 2026
fcab27e
test(casting): NDArray.ToArray<T> contract test - all 15 dtypes x eve…
Nucs Sep 25, 2026
65bdea7
feat(random): the NumPy bit-generator family - PCG64DXSM, Philox, SFC…
Nucs Sep 25, 2026
aa9905b
perf(random): bulk-fill layer for every bit generator + read-ahead zi…
Nucs Sep 25, 2026
f87b4d0
feat(random)!: legacy RandomState is NumPy's legacy-distributions.c l…
Nucs Sep 25, 2026
072eb12
feat(examples/materiallab): real-time MLS-MPM materials lab - liquids…
Nucs Sep 25, 2026
cf37128
docs(examples): RUNDOWN - record the MaterialLab commit (5bbb7e35) in…
Nucs Sep 25, 2026
910a648
perf(random): legacy RandomState samplers 1.5-5.6x NumPy 2.4.2, strea…
Nucs Sep 25, 2026
ac89847
fix(casting): float16 NaNs and uint64 -> float convert like NumPy on …
Nucs Sep 25, 2026
c0613b2
feat(random): Generator gets NumPy's whole distribution surface - 29 …
Nucs Sep 25, 2026
2358d71
docs(examples/materiallab): state what runs on NumSharp and what does…
Nucs Sep 25, 2026
b1f282c
docs(plans): U3 + oracle-join review continuation plan - one open par…
Nucs Sep 25, 2026
39d446e
feat(random): array-valued distribution parameters for RandomState an…
Nucs Sep 26, 2026
5f20488
fix(random): array-parameter audit - np.empty(size) before the broadc…
Nucs Sep 26, 2026
85d31b5
fix(polynomial): U3 reproduces NumPy's THIRD complex multiply - the N…
Nucs Sep 27, 2026
eebe85a
fix(random): type-parity audit - every legacy C long is the LP64 int6…
Nucs Sep 27, 2026
20a5b60
test(random): random-API oracle P0-P3 - every NumPyRandom/Generator o…
Nucs Sep 27, 2026
1c7ac69
test(random): random-API oracle P4 - bit generators, their State clas…
Nucs Sep 27, 2026
38ed8da
feat(polynomial): U1 - numpy.polynomial additive family + polyutils +…
Nucs Sep 27, 2026
8f70af7
test(random): random-API oracle P5 - coverage gates G2-G6 plus a para…
Nucs Sep 27, 2026
ecdab2f
ci(random): random-API oracle P6 - nightly soak under 10 fresh seeds …
Nucs Sep 27, 2026
a72a5eb
docs(random): random-API oracle P7 - Fuzz README, CLAUDE.md and compl…
Nucs Sep 27, 2026
cdf22dc
chore(random): commit the random_api oracle-map builder (test/oracle/…
Nucs Sep 27, 2026
0e39714
feat(random): wholeness pass - NumPy's random call spellings compile …
Nucs Sep 27, 2026
3dcf999
perf(random): integers/randint array path - hoisted chunk pointers, n…
Nucs Sep 27, 2026
564dc69
perf(polynomial): U1 parity + perf audit - long series on house SIMD …
Nucs Sep 27, 2026
ac8608d
feat(polynomial): U4 calculus - {p}der / {p}int for the six bases, on…
Nucs Sep 29, 2026
0896cbf
feat(polynomial): wholeness pass over U1/U3/U4 - np.array's coercion …
Nucs Sep 30, 2026
3852615
feat(polynomial): U2 series algebra - {p}mulx/mul/div/pow/fromroots x…
Nucs Sep 30, 2026
058f4f2
feat(polynomial): U2 wholeness pass - object-typed {p}pow power/maxpo…
Nucs Sep 30, 2026
e2ff947
feat(polynomial): U5 Vandermonde - {p}vander/vander2d/vander3d x 6 ba…
Nucs Sep 30, 2026
37f7262
feat(polynomial): U5 wholeness pass - the object stack of scalars com…
Nucs Sep 30, 2026
0c02740
feat(polynomial): U7 companion/roots - {p}companion/{p}roots x 6 base…
Nucs Oct 1, 2026
5989050
fix(polynomial,arc): U7 wholeness pass - object series computed or Nu…
Nucs Oct 1, 2026
105efb7
build(nuget): stop embedding package READMEs so every future version'…
Nucs Oct 1, 2026
3ecccf6
fix(test): a corpus case that never returns now ends the run BY NAME …
Nucs Oct 1, 2026
d494e83
fix(polynomial): review of every delivered unit - {p}val and mapdomai…
Nucs Oct 1, 2026
992dbb1
build(interop): hide the four unreleased interop packages (OnnxRuntim…
Nucs Oct 2, 2026
c8f1dff
fix(interop): six NDArray <-> System.Numerics.Tensors bugs - sliced t…
Nucs Oct 2, 2026
f24d0c9
fix(docs): repair system-numerics-tensors.md after c8f1dffa's hunk-on…
Nucs Oct 2, 2026
a592b7e
build(interop): release NumSharp.Interop.System.Numerics.Tensors in 0…
Nucs Oct 2, 2026
4f064e7
fix(ci): System.Numerics.Tensors package + suite build under CI's -p:…
Nucs Oct 2, 2026
1da5cf9
test(interop): System.Numerics.Tensors suite 64 -> 101 tests by nine …
Nucs Oct 2, 2026
7310f3f
docs(releases): 0.71.0 release notes - a full sweep of v0.70.0..journ…
Nucs Oct 2, 2026
1562504
fix(ci): ubuntu and macOS test legs green - macOS host OOM-killed by …
Nucs Oct 2, 2026
f7b4ddf
fix(interop): ONNX Runtime and ML.NET bridges read a released buffer …
Nucs Oct 2, 2026
fbc8de9
test(interop): ONNX Runtime and ML.NET bridges second pass by ten tec…
Nucs Oct 2, 2026
646b9a5
fix(interop): ONNX Runtime and ML.NET bridges proven lifetime- and GC…
Nucs Oct 3, 2026
75ca5fa
fix(ma): a slice of a hard-masked array inherits the hard mask - the …
Nucs Oct 3, 2026
9e0d2ce
refactor(ma): the masked indexer's setter is scoped by [NDScoped] ins…
Nucs Oct 3, 2026
1a58400
fix(clip): np.clip no longer wraps out-of-range integer bounds - a po…
Nucs Oct 3, 2026
94c9eb6
fix(math): np.trapezoid bit-exact on every layout - NumPy's NpyIter o…
Nucs Oct 3, 2026
de35a0f
fix(alloc): a view's Shape can no longer overrun a fresh allocation, …
Nucs Oct 3, 2026
9566e56
refactor(core): [NDScoped] replaces hand-written disposal in 8 method…
Nucs Oct 3, 2026
2f92d91
test(openbugs): pin the three bugs the view-Shape fix (de35a0f2) foun…
Nucs Oct 3, 2026
3169579
fix(ufunc): float add / multiply return NumPy's NaN when both operand…
Nucs Oct 3, 2026
00f2929
test(openbugs): pin how NumSharp STARTS a reduction - a sum/mean of o…
Nucs Oct 3, 2026
a075e03
refactor(core): [NDScoped] replaces hand-written disposal in 12 more …
Nucs Oct 3, 2026
2189f4f
test(openbugs): pin the NaN-operand-order paths the add / multiply fi…
Nucs Oct 3, 2026
cadd513
fix(reduce): float16 np.max / np.min / np.nanmax / np.nanmin / np.ptp…
Nucs Oct 3, 2026
d8e925a
fix(clip): np.clip is NumPy's ufunc call - fromnumeric's keyword rule…
Nucs Oct 3, 2026
24a31f7
test(openbugs): pin np.var / np.std at a degenerate size and the max/…
Nucs Oct 4, 2026
136f632
docs(clip): finish the files the two clip commits touched - XML docs …
Nucs Oct 4, 2026
c45fb4e
test(oracle+openbugs): gate how reductions START through the sign of …
Nucs Oct 4, 2026
186ddc8
fix(reduce): np.sum / np.mean start from the add identity and their f…
Nucs Oct 4, 2026
2821a70
fix(examples/materiallab): a blown-up particle can no longer crash th…
Nucs Oct 5, 2026
0cb7ed0
docs(plans): view-shape open bugs - a fix plan with progress marks fo…
Nucs Oct 5, 2026
ec28e5b
fix(creation): the wrap constructors new NDArray(Array | IArraySlice,…
Nucs Oct 5, 2026
bd26afb
fix(shape)!: Shape is immutable - the indexer setter is removed (it w…
Nucs Oct 5, 2026
bb5b2fc
fix(reduce): np.all / np.any run NumPy's reduce prologue before any w…
Nucs Oct 5, 2026
b88bcb8
fix(ndarray)!: a.shape is NumPy's tuple - every read returns a COPY o…
Nucs Oct 5, 2026
0f90421
fix(random): choice without replacement, multivariate_normal and perm…
Nucs Oct 5, 2026
d3c863e
fix(binary): two F-ordered operands where one broadcasts no longer gi…
Nucs Oct 5, 2026
95fd514
fix(shape)!: Shape.Dimensions and Shape.Strides return COPIES - `x.Sh…
Nucs Oct 5, 2026
264e379
test(openbugs): pin what the permutation work found in fancy indexing…
Nucs Oct 5, 2026
4d06d59
fix(sum): an axis that leaves ONE output runs NumPy's flat schedule -…
Nucs Oct 5, 2026
5c9d792
fix(shape)!: a caller's long[] is copied wherever it becomes a shape …
Nucs Oct 5, 2026
ec230a8
docs(plan): view-shape-open-bugs.md is complete - row 2d records its …
Nucs Oct 5, 2026
4178550
fix(var,std)!: np.var / np.std are NumPy's _var / _std statement for …
Nucs Oct 5, 2026
7026b3e
fix(polynomial,sort): two NaN-bit gaps the polynomial re-review found…
Nucs Oct 5, 2026
d1759ec
fix(nanvar,nanstd)!: np.nanvar / np.nanstd are NumPy's nanvar / nanst…
Nucs Oct 5, 2026
f17c3b2
fix(ndarray)!: np.ndarray is NumPy's ndarray.__new__ - float64 and C …
Nucs Oct 5, 2026
f3fec18
docs(plan): np-ndarray-parity.md records its commit - every item N1-N…
Nucs Oct 5, 2026
f8b3235
fix(mean)!: np.mean is NumPy's _mean statement for statement - every …
Nucs Oct 5, 2026
a7f11b3
fix(nanmean)!: np.nanmean is NumPy's nanmean statement for statement …
Nucs Oct 5, 2026
a0d64cb
docs(plan): api-parameter-parity.md marks D7 done by f17c3b2d (np.nda…
Nucs Oct 5, 2026
1dcaf0d
feat(max)!: np.max / np.min / np.amax / np.amin / np.nanmax / np.nanm…
Nucs Oct 5, 2026
76b0385
docs(plan): api-parameter-parity.md records A4's commit - item A4 (np…
Nucs Oct 5, 2026
f18bc09
fix(trapezoid)!: np.trapezoid with an axis outside y raises NumPy's I…
Nucs Oct 5, 2026
fa1a298
docs(plan): api-parameter-parity.md records A5's commit - item A5 (np…
Nucs Oct 5, 2026
9b6236a
test(openbugs): run the whole [OpenBugs] category - 75 of the 77 pass…
Nucs Oct 5, 2026
939d2c4
test(openbugs): pin the three open NaN-bit divergence classes the pol…
Nucs Oct 5, 2026
afcc343
fix(ma)!: np.ma.mean / np.ma.var / np.ma.std / np.ma.anom are numpy.m…
Nucs Oct 5, 2026
04e0e70
docs(plan): api-parameter-parity.md records A6's commit - item A6 (np…
Nucs Oct 5, 2026
2dffb8d
fix(copyto)!: np.copyto is NumPy's array_copyto - an overlapping mask…
Nucs Oct 5, 2026
72696ec
docs(plan): api-parameter-parity.md records X16's commit - items X11 …
Nucs Oct 5, 2026
1185f39
perf(float16): add / subtract / multiply / divide on every broadcast …
Nucs Oct 6, 2026
6f00ae1
docs(plan): api-parameter-parity.md records X15's commit - items X15 …
Nucs Oct 6, 2026
4116b60
fix(power)!: np.power's float loops take NumPy's scalar-exponent fast…
Nucs Oct 6, 2026
3bb5769
docs(plan): api-parameter-parity.md records X13's commit - items X13 …
Nucs Oct 6, 2026
d70cbb0
test(openbugs): pin error-message parity gaps in the stacking and axi…
Nucs Oct 6, 2026
44c1af4
test(oracle): the array-object oracle - four NumPy 2.4.2 tiers gate t…
Nucs Oct 7, 2026
4741a81
test(oracle): the relayout tiers - every corpus (op, operand position…
Nucs Oct 7, 2026
2de4328
test(oracle): the surface tier - NumPy 2.4.2 contracts for every API …
Nucs Oct 7, 2026
b08d075
test(oracle): the numpy.ma surface tier - NumPy 2.4.2 contracts for t…
Nucs Oct 8, 2026
0e88dd5
test(oracle): the surface tier's second pass - poly1d.r / poly1d.root…
Nucs Oct 8, 2026
008ee24
examples(pythonnet): NumSharpPythonnetLocalExample and NumSharpPython…
Nucs Oct 9, 2026
201e9c7
feat(matrix)!: np.matrix is NumPy's numpy.matrix as NDMatrix - the co…
Nucs Oct 9, 2026
07aa1d1
examples: the two pythonnet projects become regular NuGet-reference p…
Nucs Oct 10, 2026
19a0057
perf(compare): array-against-scalar comparisons run a vector loop - t…
Nucs Oct 10, 2026
a133fcd
docs(compare): what a C# literal operand costs is garbage-collection …
Nucs Oct 10, 2026
9a3b608
fix(cast): a copy or cast of a stepped one- or two-byte view reads no…
Nucs Oct 10, 2026
a25f794
fix(reshape): NDArray<T>.reshape(Shape) reads the dimensions of its a…
Nucs Oct 10, 2026
e2ef7f3
perf(compare): every operand layout and dtype pair of ==, !=, <, <=, …
Nucs Oct 10, 2026
b10ac7e
examples(pythonic): examples/Pythonic - Python programs that use a da…
Nucs Oct 10, 2026
5b15137
perf(alloc): a buffer of one page or more starts on a cache line - th…
Nucs Oct 10, 2026
daa5882
fix(matrix)!: m * np.array(2) is NumPy's product with a 1 x 1 matrix …
Nucs Oct 10, 2026
ebcc245
examples(pythonic)!: a port reads like its Python program - Python cl…
Nucs Oct 10, 2026
8aba70c
docs(pythonic): PYTHONIC_SPEC.md - the specification of pythonic C#: …
Nucs Oct 10, 2026
a9feadf
perf(compare): a C-ordered operand against an F-ordered one is compar…
Nucs Oct 10, 2026
51bd91f
feat(matrix)!: the np.* functions follow the object - a public functi…
Nucs Oct 10, 2026
0dea6d9
docs(releases): 0.71.0 release notes gain np.matrix - the NDMatrix en…
Nucs Oct 10, 2026
77134fa
docs(matrix): the public np.* overloads document the two exceptions t…
Nucs Oct 10, 2026
f608647
docs(pythonic): PYTHONIC_SPEC.md version 3 - the plan: six libraries …
Nucs Oct 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2,621 changes: 2,561 additions & 60 deletions .claude/CLAUDE.md

Large diffs are not rendered by default.

21 changes: 21 additions & 0 deletions .claude/skills/changelog/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,27 @@ committed artifact**. Full checklist in **`references/verify-accuracy.md`**. The
- **Dedup correctness:** a "fixed the thing I just added" line is a defect - collapse it into the
feature's line describing the *final* behavior.

## After the release publishes - put the notes on nuget.org (manual, owner-only)

The GitHub release body (the install header + `docs/releases/RELEASE_<version>.md`, composed by
build-and-release.yml's `create-release` job) is the release notes. nuget.org gets them **by hand**,
because nothing in a published package can carry them later:

- The packages embed **no README** (since after 0.70.0; the "No embedded package README" block in
`Directory.Build.props` fails `dotnet pack` if a project sets `PackageReadmeFile`). That keeps each
version's nuget.org README tab owner-editable - an embedded readme always wins and is immutable,
which is why 0.70.0 can never show its notes there.
- The nuspec's `<releaseNotes>` is no alternative: immutable once published, rendered as plain text.

**The step, per package of the release** (NumSharp, NumSharp.Bitmap, every NumSharp.Interop.*,
NumSharp.Build): sign in to nuget.org as a SciSharp owner → `https://www.nuget.org/packages/<id>/Manage`
→ **Readme** → select the new version → **Custom** tab → paste the GitHub release markdown exactly as
published (`gh release view v<version> --repo SciSharp/NumSharp --json body --jq .body`) → **Submit**.
It renders as markdown on the version's README tab; read it back from
`https://www.nuget.org/packages/<id>/<version>/GetReadMeMd` (while signed in). Submitting an empty
readme removes it again. The 0.40.0-prerelease ... 0.60.0 versions of NumSharp and NumSharp.Bitmap were
back-filled this way on 2026-10-01.

## Critical gotchas (learned the hard way)

- **The Read tool needs Windows paths; Git-Bash `/tmp` is invisible to it.** Dump commit bodies to
Expand Down
17 changes: 15 additions & 2 deletions .claude/skills/oracle/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,8 @@ in `test/NumSharp.Tests.Oracle/Fuzz/`. (Two *sibling* oracles — flags & layout
| Harness | `test/NumSharp.Tests.Oracle/Fuzz/{BitDiff,Shrinker}.cs` | Bit-exact compare (NaN tokenized *except* the contractual complex-unary NaN sign; Decimal by value) / shrink to 1 element. |
| Harness | `test/NumSharp.Tests.Oracle/Fuzz/MisalignedRegistry.cs` | The excused, documented divergences (`Classify(...)` → reason string). |
| Harness | `test/NumSharp.Tests.Oracle/Fuzz/{OracleSurfaceCoverageTests,OracleCoverageStrengthTests,Journey3TouchedOracleCoverageTests}.cs` | Coverage gates: public-surface inventory / ≥4-cases-per-op / 186 journey3 callables. |
| Harness | `test/NumSharp.Tests.Oracle/Fuzz/{UndisposedIntermediateTests,NativeAllocationChokepointTests,ScopeAudit}.cs` | **Oracle-FREE leak gates that replay the same corpus through `OpRegistry`** — buffer-pool balance + raw-alloc chokepoint. Adding an op enters these too (see gotchas). |
| Harness | `test/NumSharp.Tests.Oracle/Fuzz/{UndisposedIntermediateTests{,.Families,.Backend,.Catalogue,.Properties},NativeAllocationChokepointTests,ScopeAudit}.cs` | **Oracle-FREE leak gates that replay the same corpus through `OpRegistry`** — buffer-pool balance over the ordinary/masked/index tiers + every error path, a backend (OpenBLAS) pass, a direct catalogue, a property/field read gate, and the raw-alloc chokepoint. Adding an op enters these too (see gotchas). |
| Harness | `test/NumSharp.Tests.Oracle/Fuzz/{LeakSurfaceCoverageTests,LeakCatalogue{,.NDArray,.Masked}}.cs` | The leak COMPLETENESS gate (every public member — ApiInventory modules, operators, object surfaces — must be leak-MEASURED somewhere) + the catalogue of direct invocations for members no corpus row reaches. |
| Harness | `test/NumSharp.Tests.Oracle/Fuzz/{BlasBackendDeltaTests,MatmulParityPin,BlasEngineAutoInstallGuard}.cs` | Managed/OpenBLAS two-pass delta + the host-pin (BLAS-off by default). |
| Corpus | `test/NumSharp.Tests.Oracle/Fuzz/corpus/**/*.jsonl` | The committed corpus (**~118K rows across 68 files** at 2026-09; grows per regeneration). The csproj glob `Fuzz\corpus\**\*.jsonl` copies it — incl. any `regressions/` — to test output. |

Expand All @@ -71,7 +72,14 @@ in `test/NumSharp.Tests.Oracle/Fuzz/`. (Two *sibling* oracles — flags & layout
≥1 changing axis; all 186 journey3-touched callables have a direct case. A new unclassified API fails here.
- **`UndisposedIntermediateTests` / `NativeAllocationChokepointTests`** — **oracle-free leak gates** that reuse the
corpus + `OpRegistry` to assert the buffer pool balances (zero-leak) and that no raw native-alloc site escapes the
chokepoint allowlist. (`ScopeAudit`/`[TestCategory("ScopeAudit")]` is the shared pool-counter harness.)
chokepoint allowlist. (`ScopeAudit`/`[TestCategory("ScopeAudit")]` is the shared pool-counter harness.) Four
shared, run-once measurements: the corpus sweep (ordinary + `ma_*` + `index_*` tiers, success AND error paths), the
backend pass (ordinary tiers with OpenBLAS threads=1; `Inconclusive` without a library), the `LeakCatalogue`
(direct invocations, harness-error on an entry that cannot run) and the property/field read gate.
- **`LeakSurfaceCoverageTests`** — the leak COMPLETENESS gate: every member of the public surface (ApiInventory
`[ModuleName]` modules, the operators of the array types and of `DType`/`NDArrayFlags`/`poly1d`, the object
surfaces) must be credited by a MEASUREMENT of one of the four runs — declared-but-unmeasured never counts. **A new
public API fails here until it gains corpus rows or a catalogue entry.**
- **`BlasBackendDeltaTests`** — replays only the ~1.7K BLAS-affected ordinary cases twice (managed vs OpenBLAS),
deduplicates identical outcomes, byte-checks the real flips against NumPy on the pinned host.
- **`MetamorphicTests`** — NumPy-free invariants (round-trips / involutions), no oracle needed.
Expand Down Expand Up @@ -164,6 +172,11 @@ is in **`references/add-op.md`** — read it when adding an op. In brief:
Fix the leak (`[NDScoped]`/dispose the intermediate), don't add a `KnownEscapes` entry. `NativeAllocationChokepointTests`
separately fails if your op adds a raw `NativeMemory.*`/`Marshal.AllocHGlobal` site outside the chokepoint allowlist —
route scratch through the pools.
- **Adding ANY public member enters the leak COMPLETENESS gate.** `LeakSurfaceCoverageTests` fails on a public
method/operator/indexer that no run measured. Corpus rows credit it automatically (success path); a member no
corpus row reaches needs an `E(...)` entry in `LeakCatalogue*.cs` (`T(...)` for one that always raises; `backend: true`
for LAPACK-only). A new property is read automatically unless its owner needs a read target (`ReadTargetsFor`); a new
operator on an object type also needs the type in `LeakSurface.OperatorOwners` (the gate names it if missing).
- **Some tiers go `Inconclusive` off-Windows, not red.** `unary/nan/precision/fft/numpy_f32_kernels` (via
`RunHostLibmCorpus`) and the host-pinned `matmul_parity`/`random_parity_host`/`generator_parity_host` record bytes
reproducible only on win-amd64 (CRT libm, SIMD widths, the exact BLAS build). Off-Windows they assert `Inconclusive`,
Expand Down
3 changes: 2 additions & 1 deletion .claude/skills/oracle/references/add-op.md
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@ If a case is red, go to `references/triage.md`.
> through `OpRegistry` and asserts the buffer pool balances — the `KnownEscapes` registry is empty, so if your op
> strands a pooled intermediate it goes red **even with bit-exact values**. Run `FullyQualifiedName~UndisposedIntermediateTests`
> too, and fix any leak in the op (dispose the intermediate / `[NDScoped]`) rather than allowlisting it. See
> `references/triage.md` → "A red that is NOT a value divergence".
> `references/triage.md` → "A red that is NOT a value divergence". Its corpus rows also credit the new public member
> in the leak COMPLETENESS gate (`LeakSurfaceCoverageTests`); an API with no corpus route needs a `LeakCatalogue` entry.

## 6. What you do NOT need to do

Expand Down
21 changes: 18 additions & 3 deletions .claude/skills/oracle/references/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,21 @@ The op corpus + `OpRegistry` are reused for a DIFFERENT claim — no NumPy refer
every result disposed and asserts the buffer pool's takes==returns. A surplus take is an undisposed intermediate; a
surplus return is an out-of-pool result buffer. The `KnownEscapes` registry is now **EMPTY** — every op is gated at
ZERO — so an op that leaks a pooled buffer fails here even when its values are bit-exact. `[DoNotParallelize]`
(reads process-global pool counters, shared with `ScopeAudit.cs`).
(reads process-global pool counters, shared with `ScopeAudit.cs`). Three corpus FAMILIES are replayed —
ordinary op tiers, masked-array tiers (`ma_*`, `.Families.cs`) and index tiers (`index_*`) — each on its success
AND error paths (a NumPy-raising case must throw without stranding a buffer). Floors sit 5% under the measured
counts (2026-09-23: 213,264 success + 9,123 error paths, identical net10.0/net8.0).
- `UndisposedIntermediateTests.Backend.cs` — the same ordinary tiers with OpenBLAS installed (threads=1): the LAPACK
family (NSE without a backend), the BLAS seams, the Interop glue. `Inconclusive` where no library loads.
- `UndisposedIntermediateTests.Catalogue.cs` + `LeakCatalogue{,.NDArray,.Masked}.cs` — direct invocations of every
public member NO corpus row reaches (np.* conveniences, Array-API linalg forms, ndarray/`NDArray<T>`/`NDMaskedArray`
methods, all operators, object surfaces + indexers), measured with the same protocol against a shared
`LeakFixture`. `T(...)` = always raises (error path); an entry that cannot run is a harness error (red).
- `UndisposedIntermediateTests.Properties.cs` — every public property/field read (settable ones round-trip written)
on targets built INSIDE the measured region, so a getter caching an allocation on its owner is caught.
- `LeakSurfaceCoverageTests.cs` — the COMPLETENESS gate: every `LeakSurface` member (ApiInventory modules + operators
+ object surfaces, 1,348 members) must be credited by a MEASUREMENT of one of the four runs above. Declared but
unmeasured never counts; GC-inconclusive counts (never red); backend-skipped counts only where no library loads.
- `NativeAllocationChokepointTests.cs` — the STATIC complement: every raw `NativeMemory.*` / `Marshal.AllocHGlobal` /
`VirtualAlloc*` site in `NumSharp.Core` must be a known chokepoint (allowlist pins file → site count). A new raw
allocation fails until it is routed through the pools or consciously allowlisted. Needs the source tree
Expand All @@ -145,8 +159,9 @@ The op corpus + `OpRegistry` are reused for a DIFFERENT claim — no NumPy refer
- `OpenBugs.FuzzGate.cs` — `MisalignedRegistryTightnessTests` (each excuse branch pinned from both sides — a gross
regression in the neighbouring cell must NOT be excused) + `FuzzGateRegressionTests` (real bugs the tightening
exposed, fixed-in-src or pinned `[OpenBugs]`).
- `fuzz_random.py` — the nightly-soak seeded fuzzer (`.github/workflows/fuzz-soak.yml`), ~1M fresh cases/night;
shrunk failures get pinned under `Fuzz/corpus/regressions/`.
- `fuzz_random.py` — the nightly-soak seeded fuzzer (`.github/workflows/fuzz-soak.yml`): one fixed seed (a
deterministic canary) + nine fresh random seeds × 200K cases, ~1.8M fresh cases/night; shrunk failures get
pinned under `Fuzz/corpus/regressions/`.

## Where the corpus lives and how it reaches tests

Expand Down
9 changes: 9 additions & 0 deletions .claude/skills/oracle/references/triage.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,15 @@ names the op and the take/return imbalance, not a byte diff. Fix the leak in the
`[NDScoped]`), never add a `KnownEscapes` entry. `NativeAllocationChokepointTests` is the static twin: a new raw
`NativeMemory.*`/`Marshal.AllocHGlobal` site fails until pooled or allowlisted.

Two more `ScopeAudit` reds, neither a value divergence:
- **`EveryInventoryMember_IsLeakAudited`: "N surface members are not leak-audited".** A public member no run
measured. Give it corpus rows, or an `E(...)` entry in `LeakCatalogue*.cs` (see the SKILL.md gotcha). The message
says when an entry is DECLARED but never ran — that is the next item, not a missing entry.
- **`Catalogue_EveryEntry_…`: "catalogue entries could not run".** An entry's warm invocation threw (fix its
arguments), or a `T(...)` entry started returning (the member now succeeds — make it an ordinary `E(...)`). An
entry's own lifetime bugs read as escapes too: return every array the entry owns (the harness disposes results) and
never return a fixture array or a member's OWN field (report its size instead).

## Ledger

The complete, human-readable divergence ledger is `test/NumSharp.Tests.Oracle/Fuzz/README.md`. Keep it and
Expand Down
7 changes: 7 additions & 0 deletions .git-blame-ignore-revs
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,10 @@ e6fd25438ba488038494c60a2333b2850501ff64
# (submodule git mv + BCL-snapshot R100 renames) + rewrite all path references
# across docs/code. Mechanical, no logic change.
1e7a0c86c313b4913833bbe2f46517a352d08bcd

# Rename the ordered concurrent maps *Dict -> *Dictionary (ConcurrentOrderedDictionary,
# ConcurrentOrderedCompactDictionary, OrderedDictionary) + their tests/benchmark/probes/ledger
# references, and delete the experimental ConcurrentPointingDict. Mechanical rename, no logic
# change. Caveat: git re-attributes this commit's few genuinely NEW doc lines (e.g. the proposal's
# naming note) to neighbouring older lines; `git blame --no-ignore-revs-file` shows their true origin.
5635182d1df03bfb6c3e46a0b077593641f6eb6e
Loading
Loading