Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
300 commits
Select commit Hold shift + click to select a range
c287d70
test(logic): np.shares_memory — pin the validated flag-state & candid…
Nucs Sep 13, 2026
3a36752
fix(creation): np.geomspace — NaN start propagates NaN to every eleme…
Nucs Sep 13, 2026
68a84d3
feat(math): np.fabs — the float-only absolute value, bit-exact NumPy …
Nucs Sep 13, 2026
0bfbc06
Merge branch 'exprs' — NDExpr / np.evaluate Phases 0, 1 and 3 (parity…
Nucs Sep 13, 2026
df79938
perf(evaluate): NDExpr structural program cache + 0-d inputs as kerne…
Nucs Sep 13, 2026
4460419
perf(logic): fused early-exit fast path for np.array_equal / np.array…
Nucs Sep 13, 2026
bfc0756
refactor(math): np.fabs rides a dedicated UnaryOp.Fabs, not a shared …
Nucs Sep 13, 2026
fb50061
test(oracle): classify np.array_equiv in the surface-coverage gate (s…
Nucs Sep 13, 2026
1af18f8
docs(evaluate): plan the NDExpr capabilities beyond ndexpr-evaluate.m…
Nucs Sep 13, 2026
f417827
feat(indexing): np.put_along_axis — the setter twin of take_along_axis
Nucs Sep 13, 2026
7cd38a9
feat(dtypes): np.typename — type-code → description lookup (numpy/lib…
Nucs Sep 13, 2026
8af2107
docs(indexing): note put_along_axis's inherited OOB-order divergence …
Nucs Sep 13, 2026
ea32522
coverage(inventory): catalog the NumPy submodules the scan was struct…
Nucs Sep 13, 2026
877a36b
feat(math): np.real_if_close — collapse a near-real complex array to …
Nucs Sep 13, 2026
36d5cae
fix(io): faithful Python str repr in PyLiteral for non-printable char…
Nucs Sep 13, 2026
a0c6e2f
feat(math): np.i0 — modified Bessel I₀, bit-exact NumPy 2.4.2 at ever…
Nucs Sep 13, 2026
f361da9
test(math): harden np.real_if_close with validation-surfaced edge cases
Nucs Sep 13, 2026
72e4d29
feat(dtypes): NPY_TYPES identity enum + DType.type_num, platform-reso…
Nucs Sep 13, 2026
c0ba8f3
Merge branch 'onnxruntime' into master (local)
Nucs Sep 13, 2026
b1937c5
feat(math): np.unwrap — phase unwrapping, bit-exact NumPy 2.4.2, fuse…
Nucs Sep 13, 2026
a3666a5
feat(math): np.emath module — automatic-domain sqrt/log/log2/log10/lo…
Nucs Sep 13, 2026
686fa01
docs(math): refine np.emath complex-path parity claim after 897-case …
Nucs Sep 13, 2026
5f1476f
feat(ma): numpy.ma masked-array module — MaskedArray type + ufunc-wra…
Nucs Sep 13, 2026
ba15bad
feat(ma): masked reductions, operators, creation, constructors, extre…
Nucs Sep 13, 2026
bf66bc0
feat(ma): masked extras — average/median/dot/set-tests/sort/unique + …
Nucs Sep 13, 2026
a44ec19
fix(ma): mean result dtype matches NumPy (float32->float64, float16->…
Nucs Sep 13, 2026
ebfc711
fix(ma): mixed MaskedArray/NDArray operators + astype/asarray (castin…
Nucs Sep 13, 2026
10a5464
docs(website): add "Fundamentals and usage" section — one NumSharp ar…
Nucs Sep 14, 2026
4406b7a
feat(ma): masked set operations — intersect1d/union1d/setxor1d/setdiff1d
Nucs Sep 14, 2026
e740f3a
docs(website): add "Advanced usage and interoperability" section — on…
Nucs Sep 14, 2026
11f9c93
docs(advanced): show C# 14 extension members for extending the np/NDA…
Nucs Sep 14, 2026
8525d4b
docs(website): executable tests for every Fundamentals example + doc↔…
Nucs Sep 14, 2026
39e5ba1
feat(collections): ConcurrentOrderedDict at List/ConcurrentDictionary…
Nucs Sep 14, 2026
8e0e48a
docs(ma): add numpy.ma parity audit & gap register
Nucs Sep 14, 2026
6db8238
fix(round): np.round/around decimals!=0 — port PyArray_Round (negativ…
Nucs Sep 14, 2026
ac6ec6f
feat(collections): ConcurrentOrderedDict hardened thread-safety contr…
Nucs Sep 14, 2026
de3c429
docs(website): add "NumSharp: the absolute basics for beginners" (Num…
Nucs Sep 14, 2026
e4d73d8
feat(collections): ConcurrentOrderedDict memory analysis — measured f…
Nucs Sep 14, 2026
d7f1baf
docs(website): add "NumSharp quickstart" (NumPy quickstart conversion)
Nucs Sep 14, 2026
c945c7b
docs+test: executable doc-test coverage for the beginners + advanced …
Nucs Sep 14, 2026
b6f13a0
docs(quickstart): name apply_along_axis/bincount/corrcoef + document …
Nucs Sep 14, 2026
fed9618
perf(ndexpr): mark NDLogAddExpMath + NDHypotMath per-element kernels …
Nucs Sep 14, 2026
da2dd86
feat(evaluate): NDExpr C6 macro/decision combinators — 40 fused compo…
Nucs Sep 14, 2026
b33b651
feat(ma): close audit backlog §6 items 1–5,7 — ~34 module funcs + ~30…
Nucs Sep 14, 2026
b184183
feat(vectorize): np.vectorize + np.frompyfunc — wrap a C# delegate as…
Nucs Sep 14, 2026
3fb1d89
feat(ma): the MaskedArray indexer (audit §6 item 6, the keystone) + p…
Nucs Sep 14, 2026
4a5235d
feat(ma): quick wins — frombuffer/fromfunction/hsplit/ndenumerate + M…
Nucs Sep 14, 2026
244e233
feat(ma): masked cov/corrcoef — pairwise-complete covariance (audit §…
Nucs Sep 14, 2026
832a3ca
feat(ma): masked convolve/correlate + apply_over_axes (audit §1.C) — …
Nucs Sep 14, 2026
8f4b9e8
feat(ma): apply_along_axis — the last implementable §1.C gap; np.ma n…
Nucs Sep 14, 2026
06bb2ae
docs(collections): ConcurrentOrderedDict compact-table discovery — me…
Nucs Sep 14, 2026
e45f1de
docs(collections): ConcurrentOrderedDict — measured O(1) proof, cross…
Nucs Sep 14, 2026
e674512
docs(ndexpr): correct C6 combinator count 40 -> 39 and record the ver…
Nucs Sep 14, 2026
d870887
docs(collections): ConcurrentOrderedDict — per-member complexity, eve…
Nucs Sep 14, 2026
8b1e262
perf(evaluate): make Elu/Softplus SIMD-vectorize on the float32 hot p…
Nucs Sep 14, 2026
30106bc
docs(collections): compact-table discovery — concurrency gun proves t…
Nucs Sep 14, 2026
76228e4
feat(ma): close the last tractable np.ma audit findings — polyfit, ma…
Nucs Sep 14, 2026
d04b3c3
chore(evaluate): move C6 combinators off master to the exprs branch
Nucs Sep 14, 2026
47c1260
feat(collections): ConcurrentOrderedCompactDict — the compact open-ad…
Nucs Sep 14, 2026
d07baa7
feat(ma): close the return-type-impedance + last-param np.ma findings…
Nucs Sep 14, 2026
bfdf174
docs(collections): COD vs COCD — every member of both shipping types …
Nucs Sep 14, 2026
03c4ec4
feat(ma): close the instance conversion/export surface + REAL hard-ma…
Nucs Sep 14, 2026
76e8f78
fix(collections): AddRange floor-forced COW no longer compounds capac…
Nucs Sep 14, 2026
2cbe8e1
feat(ma): close flatten_mask/make_mask_descr/mr_ — three __all__ name…
Nucs Sep 14, 2026
0370eba
docs(site): persist DocFX TOC expand/collapse state for a sliding 48h…
Nucs Sep 14, 2026
8558705
fix(site): never restore a TOC collapse onto the active page's branch
Nucs Sep 14, 2026
7d6ae94
fix(site): persist a TOC toggle on the same click, not a later frame
Nucs Sep 14, 2026
bade986
feat(ma): byte-exact masked str/repr + masked_print_option + last ins…
Nucs Sep 14, 2026
c70ba1f
perf(reduce): SIMD widening flat Sum for int32→int64 / uint32→uint64
Nucs Sep 14, 2026
8b86730
fix(ma): scalar-strong binary promotion + copy/choose/product instanc…
Nucs Sep 14, 2026
2862d29
docs(ma): correct instance-member count via a re-verified surface dif…
Nucs Sep 15, 2026
dc2fc07
fix(core+ma): arctan2(complex) crash, ma shift dtype regression, ma m…
Nucs Sep 16, 2026
e2db7be
feat(examples): Unity gravity-sandbox game with a NumSharp-backed N-b…
Nucs Sep 16, 2026
4b4ca2f
feat(examples): falling-sand powder game on a NumSharp mass-conservin…
Nucs Sep 17, 2026
2e0db80
feat(examples): standalone terminal Player to launch the falling-sand…
Nucs Sep 17, 2026
2945841
feat(examples/fallingsand): high-resolution 1000x500 — Unity default …
Nucs Sep 17, 2026
8df5a25
docs(examples): add RUNDOWN.md summarizing the two NumSharp physics g…
Nucs Sep 17, 2026
5e722ca
feat(examples/fallingsand): templates via icons, brushes + size/shape…
Nucs Sep 17, 2026
8f23550
docs(examples): RUNDOWN — record the falling-sand fun pass (templates…
Nucs Sep 17, 2026
192f456
test(oracle): add complex128 coverage to out_where, aliasing, meshgrid
Nucs Sep 18, 2026
97360c8
test(oracle): complex128 pair-iteration coverage (nditer_pair, np.bro…
Nucs Sep 18, 2026
1dd23bb
test(oracle): expand Decimal differential coverage to the full decima…
Nucs Sep 18, 2026
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
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
  •  
  •  
  •  
1,325 changes: 1,286 additions & 39 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