basedpl 0.1.46__tar.gz → 0.1.49__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {basedpl-0.1.46 → basedpl-0.1.49}/.cargo/config.toml +4 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/.github/workflows/ci.yml +3 -3
- {basedpl-0.1.46 → basedpl-0.1.49}/.gitignore +1 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/Cargo.lock +48 -17
- {basedpl-0.1.46 → basedpl-0.1.49}/Cargo.toml +16 -5
- {basedpl-0.1.46 → basedpl-0.1.49}/DEV.md +20 -10
- {basedpl-0.1.46 → basedpl-0.1.49}/PKG-INFO +5 -5
- {basedpl-0.1.46 → basedpl-0.1.49}/README.md +3 -3
- {basedpl-0.1.46/python/basedpl → basedpl-0.1.49/editors/jetbrains/BPL.tmbundle/Syntaxes}/bpl.tmLanguage.json +9 -9
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/jetbrains/BPL.xml +322 -72
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-de.bundle/Contents/Resources/BasedPL-de.keylayout +2 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-de.txt +1 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-es.bundle/Contents/Resources/BasedPL-es.keylayout +2 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-es.txt +1 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-fr.bundle/Contents/Resources/BasedPL-fr.keylayout +2 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-fr.txt +1 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-uk.bundle/Contents/Resources/BasedPL-uk.keylayout +2 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-uk.txt +1 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-us.bundle/Contents/Resources/BasedPL-us.keylayout +2 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-us.txt +1 -1
- basedpl-0.1.49/editors/vim/syntax/bpl.vim +32 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/windows/layout.h +2 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/arrays.ipynb +2 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/assignment.ipynb +70 -3
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/bpl.xml +9 -9
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/data.ipynb +1 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/dfns.ipynb +1 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/distributions.ipynb +3 -3
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/dyalog.ipynb +24 -96
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/evaluation.qmd +1 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/getting-started.ipynb +2 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/alpha-underbar.qmd +1 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/alpha.qmd +1 -1
- basedpl-0.1.46/nbs/glyphs/under.qmd → basedpl-0.1.49/nbs/glyphs/at.qmd +5 -3
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/backslash-bar.qmd +1 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/backslash.qmd +3 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/brackets.qmd +1 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/bullet.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/transpose.qmd → basedpl-0.1.49/nbs/glyphs/circle-backslash.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/reverse-first.qmd → basedpl-0.1.49/nbs/glyphs/circle-bar.qmd +3 -3
- basedpl-0.1.46/nbs/glyphs/over.qmd → basedpl-0.1.49/nbs/glyphs/circle-diaeresis.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/factor.qmd → basedpl-0.1.49/nbs/glyphs/circle-divide.qmd +3 -3
- basedpl-0.1.46/nbs/glyphs/valences.qmd → basedpl-0.1.49/nbs/glyphs/circle-slash.qmd +1 -1
- basedpl-0.1.46/nbs/glyphs/log.qmd → basedpl-0.1.49/nbs/glyphs/circle-star.qmd +1 -1
- basedpl-0.1.46/nbs/glyphs/reverse.qmd → basedpl-0.1.49/nbs/glyphs/circle-stile.qmd +3 -3
- basedpl-0.1.46/nbs/glyphs/outer-product.qmd → basedpl-0.1.49/nbs/glyphs/circle-times.qmd +1 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/circle.qmd +2 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/colon.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/table.qmd → basedpl-0.1.49/nbs/glyphs/comma-bar.qmd +1 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/comma.qmd +2 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/del-diaeresis.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/grade-down.qmd → basedpl-0.1.49/nbs/glyphs/del-stile.qmd +4 -4
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/del.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/grade-up.qmd → basedpl-0.1.49/nbs/glyphs/delta-stile.qmd +3 -3
- basedpl-0.1.46/nbs/glyphs/each.qmd → basedpl-0.1.49/nbs/glyphs/diaeresis.qmd +1 -1
- basedpl-0.1.46/nbs/glyphs/agenda.qmd → basedpl-0.1.49/nbs/glyphs/diamond-underbar.qmd +1 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/diamond.qmd +1 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/domino.qmd +1 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/dot.qmd +7 -3
- basedpl-0.1.46/nbs/glyphs/drop.qmd → basedpl-0.1.49/nbs/glyphs/down-arrow.qmd +3 -3
- basedpl-0.1.46/nbs/glyphs/union.qmd → basedpl-0.1.49/nbs/glyphs/down-shoe.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/encode.qmd → basedpl-0.1.49/nbs/glyphs/down-tack.qmd +3 -3
- basedpl-0.1.46/nbs/glyphs/floor.qmd → basedpl-0.1.49/nbs/glyphs/downstile.qmd +1 -1
- basedpl-0.1.46/nbs/glyphs/find.qmd → basedpl-0.1.49/nbs/glyphs/epsilon-underbar.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/member.qmd → basedpl-0.1.49/nbs/glyphs/epsilon.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/tally.qmd → basedpl-0.1.49/nbs/glyphs/equal-underbar-slash.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/match.qmd → basedpl-0.1.49/nbs/glyphs/equal-underbar.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/equal.qmd → basedpl-0.1.49/nbs/glyphs/equals.qmd +3 -3
- basedpl-0.1.46/nbs/glyphs/factorial.qmd → basedpl-0.1.49/nbs/glyphs/exclamation.qmd +1 -1
- basedpl-0.1.46/nbs/glyphs/greater-or-equal.qmd → basedpl-0.1.49/nbs/glyphs/greater-than-or-equal.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/greater.qmd → basedpl-0.1.49/nbs/glyphs/greater-than.qmd +2 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/hash.qmd +4 -4
- basedpl-0.1.46/nbs/glyphs/execute.qmd → basedpl-0.1.49/nbs/glyphs/hydrant.qmd +3 -3
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/infinity.qmd +1 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/inverted-question.qmd +1 -1
- basedpl-0.1.46/nbs/glyphs/where.qmd → basedpl-0.1.49/nbs/glyphs/iota-underbar.qmd +1 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/iota.qmd +4 -4
- basedpl-0.1.46/nbs/glyphs/rank.qmd → basedpl-0.1.49/nbs/glyphs/jot-diaeresis.qmd +4 -4
- basedpl-0.1.46/nbs/glyphs/atop.qmd → basedpl-0.1.49/nbs/glyphs/jot.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/comment.qmd → basedpl-0.1.49/nbs/glyphs/lamp.qmd +1 -1
- basedpl-0.1.46/nbs/glyphs/assign.qmd → basedpl-0.1.49/nbs/glyphs/left-arrow.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/nest.qmd → basedpl-0.1.49/nbs/glyphs/left-shoe-underbar.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/enclose.qmd → basedpl-0.1.49/nbs/glyphs/left-shoe.qmd +3 -3
- basedpl-0.1.46/nbs/glyphs/left.qmd → basedpl-0.1.49/nbs/glyphs/left-tack.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/after.qmd → basedpl-0.1.49/nbs/glyphs/left-tail-arrow.qmd +3 -3
- basedpl-0.1.46/nbs/glyphs/less-or-equal.qmd → basedpl-0.1.49/nbs/glyphs/less-than-or-equal.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/less.qmd → basedpl-0.1.49/nbs/glyphs/less-than.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/dash.qmd → basedpl-0.1.49/nbs/glyphs/minus.qmd +1 -1
- basedpl-0.1.46/nbs/glyphs/not-equal.qmd → basedpl-0.1.49/nbs/glyphs/not-equals.qmd +1 -1
- basedpl-0.1.46/nbs/glyphs/div.qmd → basedpl-0.1.49/nbs/glyphs/obelus.qmd +1 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/omega-underbar.qmd +1 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/omega.qmd +1 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/overbar.qmd +3 -3
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/parentheses.qmd +1 -1
- basedpl-0.1.49/nbs/glyphs/partial.qmd +37 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/pi.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/add.qmd → basedpl-0.1.49/nbs/glyphs/plus.qmd +1 -1
- basedpl-0.1.46/nbs/glyphs/axis.qmd → basedpl-0.1.49/nbs/glyphs/quad-colon.qmd +3 -3
- basedpl-0.1.46/nbs/glyphs/stencil.qmd → basedpl-0.1.49/nbs/glyphs/quad-diamond.qmd +3 -3
- basedpl-0.1.46/nbs/glyphs/key.qmd → basedpl-0.1.49/nbs/glyphs/quad-equal.qmd +1 -1
- basedpl-0.1.46/nbs/glyphs/polynomial.qmd → basedpl-0.1.49/nbs/glyphs/quad-jot.qmd +4 -4
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/quad.qmd +2 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/question.qmd +2 -0
- basedpl-0.1.46/nbs/glyphs/root.qmd → basedpl-0.1.49/nbs/glyphs/radical.qmd +2 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/rho.qmd +1 -1
- basedpl-0.1.46/nbs/glyphs/range.qmd → basedpl-0.1.49/nbs/glyphs/right-arrow-from-bar.qmd +3 -3
- basedpl-0.1.49/nbs/glyphs/right-left-arrows.qmd +160 -0
- basedpl-0.1.46/nbs/glyphs/mix.qmd → basedpl-0.1.49/nbs/glyphs/right-shoe.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/right.qmd → basedpl-0.1.49/nbs/glyphs/right-tack.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/before.qmd → basedpl-0.1.49/nbs/glyphs/right-tail-arrow.qmd +2 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/slash-bar.qmd +1 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/slash.qmd +4 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/squad.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/power.qmd → basedpl-0.1.49/nbs/glyphs/star-diaeresis.qmd +3 -3
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/star.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/prime.qmd → basedpl-0.1.49/nbs/glyphs/stile-tilde.qmd +3 -3
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/stile.qmd +1 -1
- basedpl-0.1.46/nbs/glyphs/format.qmd → basedpl-0.1.49/nbs/glyphs/thorn.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/commute.qmd → basedpl-0.1.49/nbs/glyphs/tilde-diaeresis.qmd +2 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/tilde.qmd +1 -1
- basedpl-0.1.46/nbs/glyphs/mul.qmd → basedpl-0.1.49/nbs/glyphs/times.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/take.qmd → basedpl-0.1.49/nbs/glyphs/up-arrow.qmd +1 -1
- basedpl-0.1.46/nbs/glyphs/windows.qmd → basedpl-0.1.49/nbs/glyphs/up-down-arrow.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/intersection.qmd → basedpl-0.1.49/nbs/glyphs/up-shoe.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/decode.qmd → basedpl-0.1.49/nbs/glyphs/up-tack.qmd +3 -3
- basedpl-0.1.46/nbs/glyphs/ceiling.qmd → basedpl-0.1.49/nbs/glyphs/upstile.qmd +1 -1
- basedpl-0.1.46/nbs/glyphs/nor.qmd → basedpl-0.1.49/nbs/glyphs/vee-bar.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/or.qmd → basedpl-0.1.49/nbs/glyphs/vee.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/nand.qmd → basedpl-0.1.49/nbs/glyphs/wedge-bar.qmd +2 -2
- basedpl-0.1.46/nbs/glyphs/and.qmd → basedpl-0.1.49/nbs/glyphs/wedge.qmd +2 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/zilde.qmd +2 -2
- basedpl-0.1.49/nbs/glyphs.qmd +161 -0
- basedpl-0.1.49/nbs/hanzi-notation-zh.ipynb +518 -0
- basedpl-0.1.49/nbs/hanzi-notation.ipynb +534 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/index.ipynb +3 -3
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/keyboard.qmd +2 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/llms.txt +9 -6
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/magics.ipynb +48 -197
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/modules.qmd +8 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/notebooks.ipynb +27 -98
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/numbers.qmd +2 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/principles.ipynb +1 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/python.ipynb +178 -482
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/regex.ipynb +1 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/repl.qmd +3 -3
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/scripts.ipynb +3 -3
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/syntax.qmd +9 -3
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/image.qmd +1 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/prefs.qmd +6 -3
- basedpl-0.1.49/nbs/web.ipynb +790 -0
- basedpl-0.1.49/nbs/xml.ipynb +928 -0
- basedpl-0.1.49/package-lock.json +615 -0
- basedpl-0.1.49/package.json +6 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/py/Cargo.toml +5 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/py/src/lib.rs +4 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/pyproject.toml +5 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/python/basedpl/__init__.py +4 -4
- {basedpl-0.1.46/editors/jetbrains/BPL.tmbundle/Syntaxes → basedpl-0.1.49/python/basedpl}/bpl.tmLanguage.json +9 -9
- {basedpl-0.1.46 → basedpl-0.1.49}/python/basedpl/bpltests.py +14 -4
- {basedpl-0.1.46 → basedpl-0.1.49}/python/basedpl/editors.py +38 -11
- {basedpl-0.1.46 → basedpl-0.1.49}/python/basedpl/functions.py +37 -15
- {basedpl-0.1.46 → basedpl-0.1.49}/python/basedpl/input.js +9 -7
- {basedpl-0.1.46 → basedpl-0.1.49}/python/basedpl/layout.json +1 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/python/basedpl/lb.js +2 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/python/basedpl/printing.py +25 -19
- {basedpl-0.1.46 → basedpl-0.1.49}/python/basedpl/worker.py +10 -6
- {basedpl-0.1.46 → basedpl-0.1.49}/src/array/storage.rs +13 -153
- {basedpl-0.1.46 → basedpl-0.1.49}/src/array/text.rs +7 -7
- {basedpl-0.1.46 → basedpl-0.1.49}/src/array.rs +2 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/src/data.rs +1 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/src/display.rs +17 -10
- {basedpl-0.1.46 → basedpl-0.1.49}/src/distribution.rs +1 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/src/element.rs +5 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/eval/assign.rs +22 -3
- {basedpl-0.1.46 → basedpl-0.1.49}/src/eval/dissect.rs +18 -18
- {basedpl-0.1.46 → basedpl-0.1.49}/src/eval/operators.rs +2 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/src/eval/session.rs +23 -16
- {basedpl-0.1.46 → basedpl-0.1.49}/src/eval.rs +125 -60
- basedpl-0.1.49/src/image/codecs.rs +67 -0
- basedpl-0.1.49/src/image/imageio.rs +266 -0
- basedpl-0.1.49/src/image.rs +171 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/inspection.rs +5 -3
- {basedpl-0.1.46 → basedpl-0.1.49}/src/lib.rs +1 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/number.rs +1 -1
- basedpl-0.1.49/src/optimize.rs +234 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/primitive/numeric.rs +2 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/src/primitive.rs +102 -99
- {basedpl-0.1.46 → basedpl-0.1.49}/src/reference.rs +5 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/src/symbols.rs +158 -29
- {basedpl-0.1.46 → basedpl-0.1.49}/src/syntax.rs +37 -26
- {basedpl-0.1.46 → basedpl-0.1.49}/src/system.rs +3 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/core.rs +82 -3
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/highlighting.mjs +9 -6
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/input.mjs +9 -1
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/reference/core.bpl +183 -16
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/scaling.rs +4 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/speed.txt +108 -105
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/test_api.py +81 -63
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/test_bpltests.py +2 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/test_glyphs.py +6 -3
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/test_ipython.py +2 -2
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/test_kernel.py +11 -8
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/test_repl.py +6 -6
- basedpl-0.1.46/editors/vim/syntax/bpl.vim +0 -32
- basedpl-0.1.46/nbs/glyphs/derivative.qmd +0 -28
- basedpl-0.1.46/nbs/glyphs/inverse-pair.qmd +0 -21
- basedpl-0.1.46/nbs/glyphs.qmd +0 -153
- basedpl-0.1.46/nbs/web.ipynb +0 -790
- basedpl-0.1.46/nbs/xml.ipynb +0 -928
- basedpl-0.1.46/src/image.rs +0 -183
- {basedpl-0.1.46 → basedpl-0.1.49}/.gitattributes +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/.github/workflows/docs.yml +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/.github/workflows/speed.yml +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/.github/workflows/test.yml +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/CONTRIBUTING.md +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/LICENSE +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/_config.yml +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/_layouts/default.html +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/build.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/jetbrains/BPL.tmbundle/info.plist +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/jetbrains/README.md +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-de.bundle/Contents/Info.plist +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-de.bundle/Contents/Resources/BasedPL-de.icns +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-de.bundle/Contents/Resources/en.lproj/InfoPlist.strings +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-de.bundle/Contents/version.plist +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-es.bundle/Contents/Info.plist +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-es.bundle/Contents/Resources/BasedPL-es.icns +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-es.bundle/Contents/Resources/en.lproj/InfoPlist.strings +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-es.bundle/Contents/version.plist +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-fr.bundle/Contents/Info.plist +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-fr.bundle/Contents/Resources/BasedPL-fr.icns +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-fr.bundle/Contents/Resources/en.lproj/InfoPlist.strings +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-fr.bundle/Contents/version.plist +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-uk.bundle/Contents/Info.plist +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-uk.bundle/Contents/Resources/BasedPL-uk.icns +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-uk.bundle/Contents/Resources/en.lproj/InfoPlist.strings +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-uk.bundle/Contents/version.plist +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-us.bundle/Contents/Info.plist +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-us.bundle/Contents/Resources/BasedPL-us.icns +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-us.bundle/Contents/Resources/en.lproj/InfoPlist.strings +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/macos/BasedPL-us.bundle/Contents/version.plist +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/vim/ftdetect/bpl.vim +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/windows/README.md +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/windows/build.ps1 +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/windows/install.ps1 +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/windows/keyboard.c +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/windows/keyboard.def +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/editors/windows/keyboard.rc +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/index_files/figure-commonmark/cell-17-output-1.svg +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/index_files/figure-commonmark/cell-18-output-1.svg +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/index_files/figure-html/cell-17-output-1.svg +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/index_files/figure-html/cell-18-output-1.svg +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/lib/LICENSE-april +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/lib/README.md +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/lib/array.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/lib/dyalog.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/lib/graph.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/lib/numeric.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/lib/power.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/lib/regex.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/lib/string.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/lib/tree.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/.gitignore +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/_quarto.yml +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/bqn.xml +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/bracket-types.ipynb +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/cli.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/comparison.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/driver.js +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/dyalog.xml +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/fonts/LICENSE-SAX2 +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/fonts/README.md +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/fonts/SAX2B.ttf +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/fonts/SAX2B.woff2 +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/fonts.css +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/gallery/attractor.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/gallery/boids.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/gallery/dragon.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/gallery/flow.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/gallery/mandelbrot.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/gallery/mandelbrot32.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/gallery/orbits.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/gallery/phyllotaxis.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/gallery/prefs.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/gallery/reaction.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/gallery.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/_metadata.yml +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/braces.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/error-guard.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/glyphs/quote.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/introspection.ipynb +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/keyed.ipynb +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/nbdev.yml +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/overview.ipynb +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/papers/aplwiki-arrays.md +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/papers/brickman-depth-1-scalars.md +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/papers/mercer-based-system.md +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/playground/bpl.js +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/playground/gallery.js +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/playground/monaco-worker.js +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/playground/page.js +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/playground/worker.js +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/playground.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/plot.ipynb +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/processes.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/puppy.jpg +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/sidebar.yml +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/strings.ipynb +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/styles.css +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/_metadata.yml +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/c.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/canvas.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/constants.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/copy.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/csv.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/date.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/decompose.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/deflate.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/delay.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/distribution.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/element.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/ex.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/fetch.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/float.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/hash.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/host.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/js.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/json.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/literal.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/load.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/metadata.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/mime.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/mkdir.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/nc.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/nget.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/nl.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/normalize.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/nput.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/path.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/plot.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/r.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/rand.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/readdir.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/remove.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/rename.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/signal.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/src.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/storage.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/svg.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/time.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/ucs.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/uuid.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/vfi.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system/xml.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/system-functions.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/nbs/terms.qmd +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/provenance/README.md +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/provenance/aplcart.jsonl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/provenance/april.jsonl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/provenance/bqn.jsonl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/provenance/core.jsonl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/provenance/dyalog.jsonl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/provenance/ngn.jsonl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/py/build.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/python/basedpl/_modidx.py +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/python/basedpl/dyalog.py +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/python/basedpl/font.py +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/python/basedpl/fonts.css +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/python/basedpl/ipython.py +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/python/basedpl/keyboards.json +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/python/basedpl/keyboards.py +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/python/basedpl/notebook_runner.py +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/python/basedpl/notebooks.py +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/python/basedpl/reference.py +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/python/basedpl/syntax.py +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/python/basedpl/windows_keyboard.py +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/rustfmt.toml +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/scripts/install-macos.sh +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/scripts/prep.py +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/agreement.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/canvas.js +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/canvas.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/csv.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/date.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/error.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/eval/binder.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/execution.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/files.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/fusion.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/host.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/host_web.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/js.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/json.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/keyed.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/number_theory.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/pervasive.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/plot.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/polynomial.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/primitive/indexing.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/primitive/search.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/primitive/structural.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/protocol.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/regex.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/search.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/selection.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/timing.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/src/xml.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/conftest.py +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/reference/LICENSE-aplcart +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/reference/LICENSE-april +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/reference/LICENSE-bqn +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/reference/LICENSE-bqncrate +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/reference/LICENSE-dyalog +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/reference/LICENSE-ngn +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/reference/README.md +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/reference/aplcart.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/reference/april.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/reference/bqn.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/reference/distributions.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/reference/dyalog.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/reference/graphics.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/reference/lib.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/reference/ngn.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/reference/regex.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/reference/support/april.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/reference/support/avl.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/reference/support/redblack.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/reference/support/sbst.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/reference/support/splay.bpl +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/reference.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/speed.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/test_basic.py +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/test_graphics.py +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/test_keylayout.py +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/test_notebooks.py +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/test_reference.py +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/test_windows_keyboard.py +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/test_worker.py +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/timing-lock.mjs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/units.rs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/wasm-pkg.mjs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/wasm-speed.mjs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/wasm.mjs +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/tests/windows_keyboard.c +0 -0
- {basedpl-0.1.46 → basedpl-0.1.49}/wheel/data/share/jupyter/kernels/bpl/kernel.json +0 -0
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
[build]
|
|
4
4
|
rustflags = ["-C", "passes=slp-vectorizer"]
|
|
5
5
|
|
|
6
|
+
# rustymath uses Accelerate's per-thread BLAS controls on macOS.
|
|
7
|
+
[env]
|
|
8
|
+
MACOSX_DEPLOYMENT_TARGET = "15.0"
|
|
9
|
+
|
|
6
10
|
# x86-64 builds need a CPU with AVX2 (x86-64-v3). The kernels rely on its rounding and wider vector instructions.
|
|
7
11
|
[target.'cfg(target_arch = "x86_64")']
|
|
8
12
|
rustflags = ["-C", "target-cpu=x86-64-v3", "-C", "passes=slp-vectorizer"]
|
|
@@ -27,13 +27,13 @@ jobs:
|
|
|
27
27
|
with:
|
|
28
28
|
python-version: '3.12'
|
|
29
29
|
- if: runner.os != 'Linux'
|
|
30
|
-
run: pip install 'fastws-cli>=0.0.
|
|
30
|
+
run: pip install 'fastws-cli>=0.0.25' && ${{ env.STAGE_BPL }}
|
|
31
31
|
- uses: PyO3/maturin-action@v1
|
|
32
32
|
with:
|
|
33
|
-
args: --profile dist --out dist -i python3.10 -i python3.11 -i python3.12 -i python3.13
|
|
33
|
+
args: --profile dist --no-default-features --out dist -i python3.10 -i python3.11 -i python3.12 -i python3.13
|
|
34
34
|
manylinux: auto
|
|
35
35
|
# This runs inside the manylinux container, whose old glibc lets the binary run on older Linux distributions.
|
|
36
|
-
before-script-linux: export PATH="/opt/python/cp310-cp310/bin:$PATH" && python3.10 -m pip install 'fastws-cli>=0.0.
|
|
36
|
+
before-script-linux: export PATH="/opt/python/cp310-cp310/bin:$PATH" && python3.10 -m pip install 'fastws-cli>=0.0.25' && ${{ env.STAGE_BPL }}
|
|
37
37
|
- uses: actions/upload-artifact@v7
|
|
38
38
|
with:
|
|
39
39
|
name: wheels-${{ matrix.os }}
|
|
@@ -93,7 +93,7 @@ checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5"
|
|
|
93
93
|
|
|
94
94
|
[[package]]
|
|
95
95
|
name = "basedpl"
|
|
96
|
-
version = "0.1.
|
|
96
|
+
version = "0.1.49"
|
|
97
97
|
dependencies = [
|
|
98
98
|
"base64 0.23.1",
|
|
99
99
|
"bytemuck",
|
|
@@ -129,6 +129,7 @@ dependencies = [
|
|
|
129
129
|
"stacker",
|
|
130
130
|
"strength_reduce",
|
|
131
131
|
"tempfile",
|
|
132
|
+
"unicode-script",
|
|
132
133
|
"unicode-width",
|
|
133
134
|
"uuid",
|
|
134
135
|
"walkdir",
|
|
@@ -139,7 +140,7 @@ dependencies = [
|
|
|
139
140
|
|
|
140
141
|
[[package]]
|
|
141
142
|
name = "basedpl-cli"
|
|
142
|
-
version = "0.1.
|
|
143
|
+
version = "0.1.49"
|
|
143
144
|
dependencies = [
|
|
144
145
|
"async-trait",
|
|
145
146
|
"basedpl",
|
|
@@ -153,7 +154,7 @@ dependencies = [
|
|
|
153
154
|
|
|
154
155
|
[[package]]
|
|
155
156
|
name = "basedpl-py"
|
|
156
|
-
version = "0.1.
|
|
157
|
+
version = "0.1.49"
|
|
157
158
|
dependencies = [
|
|
158
159
|
"basedpl",
|
|
159
160
|
"bytemuck",
|
|
@@ -168,7 +169,7 @@ dependencies = [
|
|
|
168
169
|
|
|
169
170
|
[[package]]
|
|
170
171
|
name = "basedpl-wasm"
|
|
171
|
-
version = "0.1.
|
|
172
|
+
version = "0.1.49"
|
|
172
173
|
dependencies = [
|
|
173
174
|
"basedpl",
|
|
174
175
|
"js-sys",
|
|
@@ -493,9 +494,9 @@ checksum = "869b0adbda23651a9c5c0c3d270aac9fcb52e8622a8f2b17e57802d7791962f2"
|
|
|
493
494
|
|
|
494
495
|
[[package]]
|
|
495
496
|
name = "equivalent"
|
|
496
|
-
version = "1.0.
|
|
497
|
+
version = "1.0.3"
|
|
497
498
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
498
|
-
checksum = "
|
|
499
|
+
checksum = "00d174d5400e5e8fd687ad1049e2f578285fa914201b1af7e8b112a4546bd826"
|
|
499
500
|
|
|
500
501
|
[[package]]
|
|
501
502
|
name = "errno"
|
|
@@ -547,6 +548,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
547
548
|
checksum = "6e634e2e0ebac1ee034020da1ca582e17ffe4e0f5e985823721e168928136dcb"
|
|
548
549
|
dependencies = [
|
|
549
550
|
"crc32fast",
|
|
551
|
+
"libz-sys",
|
|
550
552
|
"miniz_oxide 0.9.1",
|
|
551
553
|
"zlib-rs",
|
|
552
554
|
]
|
|
@@ -859,9 +861,9 @@ dependencies = [
|
|
|
859
861
|
|
|
860
862
|
[[package]]
|
|
861
863
|
name = "json5"
|
|
862
|
-
version = "1.3.
|
|
864
|
+
version = "1.3.2"
|
|
863
865
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
864
|
-
checksum = "
|
|
866
|
+
checksum = "c77a3f1d413a994290ebe4f96047763a84d04a1f31492c51328402986d7fe5fa"
|
|
865
867
|
dependencies = [
|
|
866
868
|
"serde",
|
|
867
869
|
"ucd-trie",
|
|
@@ -910,6 +912,17 @@ version = "0.2.16"
|
|
|
910
912
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
911
913
|
checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
|
|
912
914
|
|
|
915
|
+
[[package]]
|
|
916
|
+
name = "libz-sys"
|
|
917
|
+
version = "1.1.30"
|
|
918
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
919
|
+
checksum = "f710a23e6dbf193214fd46ca56a9d6864e550abe86202184532ae7275e46de19"
|
|
920
|
+
dependencies = [
|
|
921
|
+
"cc",
|
|
922
|
+
"pkg-config",
|
|
923
|
+
"vcpkg",
|
|
924
|
+
]
|
|
925
|
+
|
|
913
926
|
[[package]]
|
|
914
927
|
name = "linux-raw-sys"
|
|
915
928
|
version = "0.12.1"
|
|
@@ -1110,6 +1123,12 @@ version = "0.2.17"
|
|
|
1110
1123
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1111
1124
|
checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
|
|
1112
1125
|
|
|
1126
|
+
[[package]]
|
|
1127
|
+
name = "pkg-config"
|
|
1128
|
+
version = "0.3.34"
|
|
1129
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1130
|
+
checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548"
|
|
1131
|
+
|
|
1113
1132
|
[[package]]
|
|
1114
1133
|
name = "plotters"
|
|
1115
1134
|
version = "0.3.7"
|
|
@@ -1398,9 +1417,9 @@ dependencies = [
|
|
|
1398
1417
|
|
|
1399
1418
|
[[package]]
|
|
1400
1419
|
name = "rustymath"
|
|
1401
|
-
version = "0.1.
|
|
1420
|
+
version = "0.1.19"
|
|
1402
1421
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1403
|
-
checksum = "
|
|
1422
|
+
checksum = "708c702fa9ff66ef712a124e51aa467e699a322e4cc8aebdd83c4ce05e7e592b"
|
|
1404
1423
|
dependencies = [
|
|
1405
1424
|
"half",
|
|
1406
1425
|
"hashbrown 0.17.1",
|
|
@@ -1672,9 +1691,9 @@ dependencies = [
|
|
|
1672
1691
|
|
|
1673
1692
|
[[package]]
|
|
1674
1693
|
name = "tokio"
|
|
1675
|
-
version = "1.53.
|
|
1694
|
+
version = "1.53.3"
|
|
1676
1695
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1677
|
-
checksum = "
|
|
1696
|
+
checksum = "ce3335fa71841cda333a58d7615b03901380ecf09d59b3296d21f8bbac0dde4e"
|
|
1678
1697
|
dependencies = [
|
|
1679
1698
|
"bytes",
|
|
1680
1699
|
"libc",
|
|
@@ -1754,6 +1773,12 @@ version = "1.0.27"
|
|
|
1754
1773
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1755
1774
|
checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563"
|
|
1756
1775
|
|
|
1776
|
+
[[package]]
|
|
1777
|
+
name = "unicode-script"
|
|
1778
|
+
version = "0.5.8"
|
|
1779
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1780
|
+
checksum = "383ad40bb927465ec0ce7720e033cb4ca06912855fc35db31b5755d0de75b1ee"
|
|
1781
|
+
|
|
1757
1782
|
[[package]]
|
|
1758
1783
|
name = "unicode-segmentation"
|
|
1759
1784
|
version = "1.13.3"
|
|
@@ -1798,6 +1823,12 @@ dependencies = [
|
|
|
1798
1823
|
"wasm-bindgen",
|
|
1799
1824
|
]
|
|
1800
1825
|
|
|
1826
|
+
[[package]]
|
|
1827
|
+
name = "vcpkg"
|
|
1828
|
+
version = "0.2.15"
|
|
1829
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1830
|
+
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
|
|
1831
|
+
|
|
1801
1832
|
[[package]]
|
|
1802
1833
|
name = "version_check"
|
|
1803
1834
|
version = "0.9.5"
|
|
@@ -2052,7 +2083,7 @@ checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc"
|
|
|
2052
2083
|
|
|
2053
2084
|
[[package]]
|
|
2054
2085
|
name = "xtask"
|
|
2055
|
-
version = "0.1.
|
|
2086
|
+
version = "0.1.49"
|
|
2056
2087
|
dependencies = [
|
|
2057
2088
|
"anyhow",
|
|
2058
2089
|
"serde_json",
|
|
@@ -2085,18 +2116,18 @@ dependencies = [
|
|
|
2085
2116
|
|
|
2086
2117
|
[[package]]
|
|
2087
2118
|
name = "zerocopy"
|
|
2088
|
-
version = "0.8.
|
|
2119
|
+
version = "0.8.63"
|
|
2089
2120
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2090
|
-
checksum = "
|
|
2121
|
+
checksum = "e5fe1f8f1b06191a00962174c61aa5005e0bb391a6d80d07e24d115c01a92ed8"
|
|
2091
2122
|
dependencies = [
|
|
2092
2123
|
"zerocopy-derive",
|
|
2093
2124
|
]
|
|
2094
2125
|
|
|
2095
2126
|
[[package]]
|
|
2096
2127
|
name = "zerocopy-derive"
|
|
2097
|
-
version = "0.8.
|
|
2128
|
+
version = "0.8.63"
|
|
2098
2129
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2099
|
-
checksum = "
|
|
2130
|
+
checksum = "863ad3ac83293fb4d740aedbfdc9240dd8d1a50c1099acd76ce80ce7c7230c7f"
|
|
2100
2131
|
dependencies = [
|
|
2101
2132
|
"proc-macro2",
|
|
2102
2133
|
"quote",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
members = ["py"]
|
|
3
3
|
|
|
4
4
|
[workspace.package]
|
|
5
|
-
version = "0.1.
|
|
5
|
+
version = "0.1.49"
|
|
6
6
|
edition = "2021"
|
|
7
7
|
rust-version = "1.98"
|
|
8
8
|
license = "Apache-2.0"
|
|
@@ -40,29 +40,32 @@ incremental = false
|
|
|
40
40
|
lto = false
|
|
41
41
|
strip = true
|
|
42
42
|
|
|
43
|
+
[features]
|
|
44
|
+
default = ["native"]
|
|
45
|
+
# rustymath's own linear algebra, beside Accelerate on macOS, for `RUSTYMATH_NATIVE=1`. The Mac release builds turn it off.
|
|
46
|
+
native = ["rustymath/native"]
|
|
47
|
+
|
|
43
48
|
[dependencies]
|
|
44
49
|
csv = "1"
|
|
45
50
|
tempfile = "3"
|
|
46
51
|
serde = ">=1.0.229, <2"
|
|
47
52
|
serde_json = { version = "1", features = ["arbitrary_precision", "preserve_order"] }
|
|
48
53
|
unicode-width = { version = ">=0.2.2, <1", default-features = false }
|
|
54
|
+
unicode-script = "0.5"
|
|
49
55
|
num-rational = ">=0.4.2, <1"
|
|
50
56
|
num-complex = { version = ">=0.4.6, <1", features = ["bytemuck"] }
|
|
51
57
|
num-bigint = ">=0.4.6, <0.5"
|
|
52
58
|
num-traits = ">=0.2.19, <1"
|
|
53
59
|
half = { version = ">=2.7.1, <3", features = ["num-traits", "bytemuck"] }
|
|
54
|
-
rustymath = ">=0.1.
|
|
60
|
+
rustymath = { version = ">=0.1.18, <1", default-features = false }
|
|
55
61
|
strength_reduce = ">=0.2.4, <1"
|
|
56
62
|
rand = ">=0.10.2, <1"
|
|
57
63
|
# AnswerDotAI's fork measures text with a canvas, which works in a Web Worker: plotters-rs/plotters#746.
|
|
58
64
|
plotters = { git = "https://github.com/AnswerDotAI/plotters.git", branch = "master", default-features = false, features = ["svg_backend", "colormaps", "full_palette"] }
|
|
59
|
-
image = { version = ">=0.25.6, <1", default-features = false, features = ["png", "jpeg"] }
|
|
60
|
-
png = ">=0.18.1, <1"
|
|
61
65
|
base64 = ">=0.22.1, <1"
|
|
62
66
|
stacker = ">=0.1.25, <1"
|
|
63
67
|
foldhash = ">=0.2.0, <1"
|
|
64
68
|
bytemuck = { version = ">=1.25.2, <2", features = ["extern_crate_alloc"] }
|
|
65
|
-
flate2 = ">=1.1.10, <2"
|
|
66
69
|
json5 = ">=1.3.1, <2"
|
|
67
70
|
roxmltree = { version = ">=0.21.1, <1", default-features = false, features = ["std"] }
|
|
68
71
|
sha2 = ">=0.10.9, <1"
|
|
@@ -76,6 +79,14 @@ nix = { version = ">=0.31.3, <1", default-features = false, features = ["user"]
|
|
|
76
79
|
[target.'cfg(target_vendor = "apple")'.dependencies]
|
|
77
80
|
# The timing lock's QoS call, which keeps a timing on the performance cores.
|
|
78
81
|
libc = ">=0.2.190, <1"
|
|
82
|
+
# The Mac build links the zlib that macOS ships, in place of compiling `miniz_oxide`.
|
|
83
|
+
flate2 = { version = ">=1.1.10, <2", default-features = false, features = ["zlib"] }
|
|
84
|
+
|
|
85
|
+
[target.'cfg(not(target_vendor = "apple"))'.dependencies]
|
|
86
|
+
flate2 = ">=1.1.10, <2"
|
|
87
|
+
# Macs decode and encode images through ImageIO instead.
|
|
88
|
+
image = { version = ">=0.25.6, <1", default-features = false, features = ["png", "jpeg"] }
|
|
89
|
+
png = ">=0.18.1, <1"
|
|
79
90
|
|
|
80
91
|
[target.'cfg(not(all(target_arch = "wasm32", target_os = "unknown")))'.dependencies]
|
|
81
92
|
chrono = { version = ">=0.4.45, <0.5", features = ["unstable-locales"] }
|
|
@@ -20,7 +20,11 @@ Build nothing else without discussion: no scratch crates, alternate target direc
|
|
|
20
20
|
|
|
21
21
|
An already-running Python process retains its loaded extension. In a kernel, use `from basedpl.worker import fresh; fresh(code)` to check the installed `bpl` in a fresh worker instead of restarting the kernel. A BPL error raises `BplError`. Check one expression and read its result before building on it. `basedpl.bpltests.check_file` and `check_page` check reference files and documentation through the worker without building Rust.
|
|
22
22
|
|
|
23
|
-
Measure with `BASEDPL_COSTS=1 cargo test --test speed -- --nocapture` or `basedpl.bpltests.time_cases(cases)`. Both
|
|
23
|
+
Measure with `BASEDPL_COSTS=1 cargo test --test speed -- --nocapture` or `basedpl.bpltests.time_cases(cases)`. Both count costs in copies. A copy is the time to write as many floats as the data has items, each negated, into a second buffer. Budgets are single-thread measurements. Use `time_cases(..., threads=...)` separately for scaling. `speed_costs()` reads the cases in `tests/speed.txt`. `cases=` selects expressions, `wasm=DIR` selects a browser build, `bpl=PATH` selects another native `bpl`, and `native=True` times rustymath's own linear algebra, which dev builds compile in. `logged_costs(log)` reads CI output, and `cargo_costs(path)` runs either project's speed test.
|
|
24
|
+
|
|
25
|
+
The manual `Speed` workflow measures the native and wasm builds on CI. When you review a run, look mainly for costs that changed by more than 20%, especially where several similar operations changed by similar amounts. Never raise budgets mechanically from a run's costs, because mechanical rises can lock in poor performance. Study each slowdown until you know its cause. Raise a budget only for a slowdown you've judged reasonable, never for a minor variation. `set_budgets(native, wasm, cases=cases)` applies the rule in the budget file to the cases that `cases` names. Name only the cases whose budgets should change. Without `cases`, it changes every case with a cost. A case can appear in more than one section, such as `[copies]` and `[widths]`. `sections=` limits the change to the sections it names. Pass `run=` only when the run sets every budget. It replaces the header line that names the run all the CI figures come from. `path=` selects rustymath's `tests/speed.txt`.
|
|
26
|
+
|
|
27
|
+
To compare a change with the build before it, copy the installed `bpl` before the change, then time both copies in turn with `speed_costs(bpl=path)` or `time_cases(..., bpl=path)`. Don't restore old code in the shared tree to get a baseline. On macOS, native timings of matrix products and decompositions mostly measure Accelerate. Rustymath's DEV.md says how to time rustymath's own kernels.
|
|
24
28
|
|
|
25
29
|
Cooperating tools share `/tmp/aai-ws-timing.lock`. Timings take it exclusively. `cargo develop`, `cargo wasm`, the reference test and pytest take it shared. Other Rust tests and bare Cargo commands do not all take it. After five minutes a timing fails; a build/test proceeds without the lock. After 30 seconds, an exclusive wait prints the processes with the lock file open. The list can include processes that are only waiting for the lock. Never hold it in the shared kernel process or coordinate timings manually. A timing launched there would block behind the hold and stall other agents' kernel calls. Native timings set rustymath's current-thread count to one and request user-interactive macOS QoS to favour performance cores. QoS is not CPU affinity.
|
|
26
30
|
|
|
@@ -28,15 +32,15 @@ Run `cargo wasm` during development only for browser work. Agents use `cargo was
|
|
|
28
32
|
|
|
29
33
|
### X86-64 machine code
|
|
30
34
|
|
|
31
|
-
To inspect x86 code
|
|
35
|
+
To inspect the x86-64 code that CI and Linux run, build the library for Linux x86-64. In basedpl:
|
|
32
36
|
|
|
33
37
|
```bash
|
|
34
|
-
cargo build --lib --release --target x86_64-
|
|
38
|
+
CC_x86_64_unknown_linux_gnu=clang cargo build --lib --release --target x86_64-unknown-linux-gnu --target-dir /tmp/aai-ws-x86 -p basedpl
|
|
35
39
|
```
|
|
36
40
|
|
|
37
|
-
That target is installed here.
|
|
41
|
+
In rustymath, use `-p rustymath`. The target is Linux because macOS builds leave out rustymath's native linear algebra kernels. That target is installed here. `-p` builds only the library, because the Python extension crates can't be built for Linux on this Mac. `CC_x86_64_unknown_linux_gnu=clang` lets Apple's `clang` assemble the x86-64 source in basedpl's `psm` dependency, because this Mac has no `x86_64-linux-gnu-gcc`. Don't move that setting into `.cargo/config.toml`. CI's Linux release builds also read that file, and their manylinux container has no `clang`. The build matches CI's `test` profile in its x86-64 flags and optimization settings. Run it only to answer an x86-code question. It doesn't take the timing lock and can disturb timings running alongside it.
|
|
38
42
|
|
|
39
|
-
Read the newest `lib<crate>-<hash>.rlib` under `/tmp/aai-ws-x86/x86_64-
|
|
43
|
+
Read the newest `lib<crate>-<hash>.rlib` under `/tmp/aai-ws-x86/x86_64-unknown-linux-gnu/release/deps` with `objdump -d -r --no-show-raw-insn --disassemble-symbols=NAME`. `-r` identifies called functions. `objdump` warns for each archive object without that symbol. `-C` matches demangled names but splits them at commas; for a generic name containing a comma, get its mangled name from `nm` and omit `-C`. Generic code belongs to the crate that instantiates it. Don't use `--emit asm`: the resulting codegen-unit arrangement can inline differently from the build being inspected.
|
|
40
44
|
|
|
41
45
|
## Workspace, builds and CI
|
|
42
46
|
|
|
@@ -54,6 +58,8 @@ Rust 1.98 or later supplies algebraic float operations. `test` inherits `release
|
|
|
54
58
|
|
|
55
59
|
`fastws`'s `cargo develop` builds profile `test`, installs the extension and stages `bpl` into the venv. `py/` enables PyO3's `extension-module` and supplies its link arguments without libpython. Editable installs use `fastws.build_backend`; they install metadata and a path to `python/` without compiling Rust. After a standalone `uv sync` or editable pip install, run `cargo develop`. `ws-sync` performs that rebuild after syncing. Wheels use maturin for the extension and `cargo stage` for the Python-free CLI. Linux staging runs inside the manylinux container.
|
|
56
60
|
|
|
61
|
+
Basedpl's crates pass on rustymath's default `native` feature, which rustymath's DEV.md describes. Each depends on the crate below it with `default-features = false` and makes `native` its own default. The release job builds wheels with `--no-default-features`. `cargo stage` always builds without default features. The released Mac builds therefore leave out rustymath's own linear algebra. On Apple targets, `flate2` uses the system zlib. Other targets keep its Rust backend, `miniz_oxide`.
|
|
62
|
+
|
|
57
63
|
Use published dependency ranges with the lower bounds required by the APIs in use. `Cargo.toml` names a published rustymath range; the `~/aai-ws` Cargo patch selects the sibling checkout locally. CI resolves published crates. Release rustymath changes before relying on them in basedpl CI. Don't edit fastws-generated Cargo patches, `.git/fastws-cargo-key` or workspace configuration, and don't commit the workspace-generated `Cargo.lock`. `meta/` is ignored planning material, not contributor documentation. `[tool.uv] cache-keys` tracks packaging manifests, not Rust sources.
|
|
58
64
|
|
|
59
65
|
`Test` runs native and wasm jobs on pushes to main and pull requests. Native CI runs `cargo test`, editable installation, `cargo develop`, pytest, `bpl-nb` and `nbdev-test`. Python tests use the same test-profile build. The wasm job builds with `cargo wasm --strip` and runs both Node suites. Both jobs use `ubicloud-standard-4`; speed budgets are set for that runner. They generate a lockfile before restoring `Swatinem/rust-cache`, making dependency changes part of the cache key. `Speed` is manually triggered and restores those caches.
|
|
@@ -93,9 +99,11 @@ User-facing language rules belong in `nbs/syntax.qmd`, `evaluation.qmd`, `number
|
|
|
93
99
|
|
|
94
100
|
The lexer/parser records byte spans and structural syntax without evaluating expressions. `parse_at` distinguishes complete input, incomplete input and errors at a given float width. Public `parse` uses f64; `Session::parse` uses the session width. `syntax_tree` supplies source tools with structural nodes and recovers invalid chunks as `Error` nodes. `highlight` shares the lexer.
|
|
95
101
|
|
|
102
|
+
`symbols.rs` owns APL, simplified and traditional Hanzi spellings. Its rows also hold each glyph's names: a glyph name for the character, which is also its page's file name in `nbs/glyphs/`, and a name for each valence, or one name where both valences do the same thing. The glyph reference, named entry, help and Python's exported names all read them there. Parsing always accepts them together, canonicalizing token decisions while retaining original source and spans. Han characters are reserved outside strings and comments. The `notation` preference affects structured function/operator display, not stored source, serialization or structural APIs; help and editor metadata use the same spelling table.
|
|
103
|
+
|
|
96
104
|
The binder resolves runtime categories right to left. It owns unfinished strands, trains and bound arguments; shared function nodes are immutable. Grammatical reduction produces application requests instead of calling functions. Primitive/operator rows own names, operand kinds, ranks, pervasion, axis behaviour and reduction identities. Change those rows instead of duplicating metadata in consumers. A non-extending primitive above its natural ranks runs through Rank; pervasive Each/Outer/Rank paths reuse whole-array kernels.
|
|
97
105
|
|
|
98
|
-
Dot names rewrite to Pick, and dot brackets/subscripts to selection. Dot parentheses evaluate a namespace: `T.(expr)` and `T⍎text`
|
|
106
|
+
Dot names rewrite to Pick, and dot brackets/subscripts to selection. Dot parentheses evaluate a namespace: `T.(expr)` and `T⍎text` bind each key on the first axis of `T` to its item or major cell as a local, resolve other names in the caller and keep assignments local. They share the scoped execution route and lexical lifetime checks. Between functions, dot remains inner product.
|
|
99
107
|
|
|
100
108
|
Lexical frames use non-owning parent indices. Closures see live bindings, not snapshots. Plain assignment is local; modified/selective assignment updates the nearest existing binding. Retain the resolved owner and original array across modifier calls rather than looking the name up again. Returns and outer writes reject functions, including those nested in arrays/prototypes, whose frames would not survive. Tail calls retain dependencies from arguments and the called function. No collector is used; recheck this lifetime reasoning before permitting escaping lexical captures.
|
|
101
109
|
|
|
@@ -115,7 +123,7 @@ Numeric storage fills with zero and characters with blank. Mixed nonempty arrays
|
|
|
115
123
|
|
|
116
124
|
`Layout` owns dimensions, position keys, axis names and optional renderer metadata. Agreement unites keys and broadcasts through index maps. Missing positions read each source's prototype. Agreement pairs equal axis names first. It pairs remaining axes positionally unless both have different names. Result assembly drops colliding axis names; public name attachment rejects duplicates. Contracted axes require equal key sets and retain the first order. Nonempty key lists with no named positions become unkeyed; empty record keys survive.
|
|
117
125
|
|
|
118
|
-
`Gather` owns copying and widening. `Steps` describes strides, ranges/fills, rotations and offset tables. Structural operations should use `remap`/gathering rather than reconstructing `Value`s per item. Equal-shape cells copy in blocks. `Items` reads counts, positions and axes from compact storage without boxing every item. Shape, tally, positions and predicates have dedicated integer/Boolean builders.
|
|
126
|
+
`Gather` owns copying and widening. `Steps`, from rustymath's `gather`, describes strides, ranges/fills, rotations and offset tables. `Gather::walk` copies compact storage through `rustymath::gather::walk`. Structural operations should use `remap`/gathering rather than reconstructing `Value`s per item. Equal-shape cells copy in blocks. `Items` reads counts, positions and axes from compact storage without boxing every item. Shape, tally, positions and predicates have dedicated integer/Boolean builders.
|
|
119
127
|
|
|
120
128
|
Selective assignment and structural Under share label-based target discovery. Function-Under applies its selector to both arguments independently before calling its operand; labels then identify writeback into the right argument. Positions-Under passes the left argument whole. Keep those contracts distinct. Keyed values align to selected keys, and nested paths retain empty-cell structure.
|
|
121
129
|
|
|
@@ -125,7 +133,7 @@ Rank/Each/Outer assemble cells through shared layout/prototype rules. A 0-cell p
|
|
|
125
133
|
|
|
126
134
|
Axis nodes select/move axes and reuse Rank when the function has no direct axis meaning. Vector-axis reduction uses the general composed-ravel rule, preserving axis order and the whole seed. Single-axis reductions retain direct kernels. Layout-only changes share storage. Structural results retain renderers where their rank permits; scans and in-place changes copy complete layouts. Match ignores renderers.
|
|
127
135
|
|
|
128
|
-
Inverse nodes propagate fixed-argument sides through composition. Candidate-building primitive inverses validate by applying the primitive again. Inverse scans share forward scan's seed/axis validation. Agenda calls its selector once, then passes the original arguments to the selected branch. Computed operands for Rank, Axis, Stencil and Agenda use shared operand evaluation. Python constructs these nodes directly, not by generating source.
|
|
136
|
+
Inverse nodes propagate fixed-argument sides through composition. `f⁻¹←g` and `f∂←g` replace the binding with a `Ruled` node, which holds the function with its hand-written inverse and derivative. Calling it calls the function. `⁻¹` and `∂` use the rules, and Under counts an attached inverse as keeping every item. Candidate-building primitive inverses validate by applying the primitive again. Inverse scans share forward scan's seed/axis validation. Agenda calls its selector once, then passes the original arguments to the selected branch. Computed operands for Rank, Axis, Stencil and Agenda use shared operand evaluation. Python constructs these nodes directly, not by generating source.
|
|
129
137
|
|
|
130
138
|
## Numbers and backend ownership
|
|
131
139
|
|
|
@@ -145,7 +153,7 @@ Only f64 comparisons use the session tolerance, from 0 to `1E-14`. f32/f16 compa
|
|
|
145
153
|
|
|
146
154
|
`Domain` and `with_field!` select working reals, Complex64 or BigRational for generic numeric algorithms. Compact storage selects the domain without scanning its items. `number::read` converts once; `Field::array` builds compact float/complex results without a `Number` per item. Each caller lists the domains it supports. Compact complex input does not take a real path merely because all imaginary parts are zero; results built through `Value::complex` can normalize to float storage.
|
|
147
155
|
|
|
148
|
-
Rustymath owns the mathematical algorithms. Basedpl owns pervasion, storage, numeric promotion, axes and language policy. Approximate matrix solve/pseudoinverse and decomposition use
|
|
156
|
+
Rustymath owns the mathematical algorithms. Basedpl owns pervasion, storage, numeric promotion, axes and language policy. Approximate matrix solve/pseudoinverse and decomposition use rustymath factorizations. On macOS, rustymath sends much of this work to Accelerate, as its DEV.md describes. No platform-specific adapter belongs here. The Cargo configuration, for Cargo's own builds, and `pyproject.toml`, for the wheels, both set the macOS deployment minimum to 15. Exact solve/pseudoinverse/determinant use rational field algorithms. Generic permanent and polynomial helpers also run at floating/complex field types. Singular/wide matrix division gives least-norm solutions. LU eligibility and SVD cutoffs are rustymath policy, not duplicated here.
|
|
149
157
|
|
|
150
158
|
`•decompose`/`•decompose⁻¹` share domain reading and `Factor` dispatch, with options for kind, vectors and complete QR. Polynomial adapters choose compact evaluation or generic field operations; gradients differentiate coefficients before evaluating. Number-theory adapters supply cancellation checks and assemble result cells. Distribution constructors expose native density/CDF/quantile/sample functions. Compact continuous calls use slice objects. Discrete samples and finite discrete quantiles are exact integers.
|
|
151
159
|
|
|
@@ -211,9 +219,11 @@ The playground and gallery load released assets from jsDelivr, or local `nbs/pla
|
|
|
211
219
|
|
|
212
220
|
`system.rs` owns case-insensitive system names, valence, item mapping and result prototypes. Native records use ordinary function nodes and calls. Empty native item mapping returns its declared prototype without calling the function. `data::Options` is the shared keyed-option decoder; formats don't invent separate option parsers.
|
|
213
221
|
|
|
222
|
+
`optimize.rs` implements `⇄` on `rustymath::optimize`. The left argument holds the options. `Goal` evaluates the function at points in the start's layout for `minimize`. Where `Function::differentiable` holds, `Goal` also calls `f∂` for the gradient. `∂` itself uses the same test. With `"solve":$t`, `Residual` is the `Mapping` that `solve` takes, or that `solve_affine` takes with `"linear":$t` as well. An attached derivative gives its vector–Jacobian products, and the function in option `precondition` gives its preconditioner.
|
|
223
|
+
|
|
214
224
|
CSV columns, JSON arrays and Python lists share `data::imported`: a non-fill finite float or any nonfinite float triggers float promotion when every number converts losslessly. Finite fills alone do not trigger it. Otherwise items keep their kinds. JSON objects/dictionaries stay mixed. Binary data uses exact bytes. Writes validate before opening and create exclusively unless overwrite is explicit. CSV/JSON/XML exports use `•csv⁻¹`, `•json⁻¹` and `•xml⁻¹`.
|
|
215
225
|
|
|
216
|
-
`regex.rs` shares host regex state between match/replace native functions; hosts retain their own regex syntax. `xml.rs` represents keyed element trees and distinguishes XML escaping/validation from HTML raw script/style and void-element rules. SVG uses its own renderer. `image.rs` owns
|
|
226
|
+
`regex.rs` shares host regex state between match/replace native functions; hosts retain their own regex syntax. `xml.rs` represents keyed element trees and distinguishes XML escaping/validation from HTML raw script/style and void-element rules. SVG uses its own renderer. `image.rs` owns pictures, their options and animation timing, as plain pixel buffers. Its `codec` module decodes and encodes those buffers through ImageIO on Apple targets (`image/imageio.rs`) and through the `image` and `png` crates elsewhere (`image/codecs.rs`). Native/browser renderers use the MIME/byte formats their frontends support. `plot.rs` stores specs and draws SVG on demand; the renderer owns defaults/validation. Rendering options belong in their user pages and implementation comments.
|
|
217
227
|
|
|
218
228
|
`display.rs` owns plain/boxed/function display, elision and MIME rendering. Display settings affect implicit presentation, not returned values or `⍕`; explicit output prints all items. `•mime` calls a renderer with echo disabled and cancellation active. Failed implicit rendering falls back to text; interrupts/timeouts propagate. `canvas.rs` serializes drawing data and typed bytes; `canvas.js` and `nbs/driver.js` own browser playback. Keep formatting, serialization and rich output as separate contracts.
|
|
219
229
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: basedpl
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.49
|
|
4
4
|
Classifier: Programming Language :: Rust
|
|
5
5
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
6
6
|
Requires-Dist: fastcore
|
|
7
7
|
Requires-Dist: fastship>=0.0.11 ; extra == 'dev'
|
|
8
|
-
Requires-Dist: fastws-cli>=0.0.
|
|
8
|
+
Requires-Dist: fastws-cli>=0.0.25 ; extra == 'dev'
|
|
9
9
|
Requires-Dist: maturin>=1.9.4,<2.0 ; extra == 'dev'
|
|
10
10
|
Requires-Dist: pytest ; extra == 'dev'
|
|
11
11
|
Requires-Dist: numpy ; extra == 'dev'
|
|
@@ -188,11 +188,11 @@ Under (`@`) transforms the argument, applies a function, then reverses the trans
|
|
|
188
188
|
|
|
189
189
|
1.2 2.7
|
|
190
190
|
|
|
191
|
-
Explore [iteration and inverses](https://answerdotai.github.io/basedpl/glyphs/
|
|
191
|
+
Explore [iteration and inverses](https://answerdotai.github.io/basedpl/glyphs/star-diaeresis.html), [Under](https://answerdotai.github.io/basedpl/glyphs/at.html), [windows](https://answerdotai.github.io/basedpl/glyphs/up-down-arrow.html) and [function selection](https://answerdotai.github.io/basedpl/glyphs/diamond-underbar.html).
|
|
192
192
|
|
|
193
193
|
### Mathematical tools
|
|
194
194
|
|
|
195
|
-
[Primes](https://answerdotai.github.io/basedpl/glyphs/
|
|
195
|
+
[Primes](https://answerdotai.github.io/basedpl/glyphs/stile-tilde.html) and [factorisation](https://answerdotai.github.io/basedpl/glyphs/circle-divide.html) are built in:
|
|
196
196
|
|
|
197
197
|
``` bpl
|
|
198
198
|
⨸360ₓ
|
|
@@ -200,7 +200,7 @@ Explore [iteration and inverses](https://answerdotai.github.io/basedpl/glyphs/po
|
|
|
200
200
|
|
|
201
201
|
[2 2 2 3 3 5]ₓ
|
|
202
202
|
|
|
203
|
-
[Polynomials](https://answerdotai.github.io/basedpl/glyphs/
|
|
203
|
+
[Polynomials](https://answerdotai.github.io/basedpl/glyphs/quad-jot.html) support coefficients, roots and evaluation. Polynomial functions can be [differentiated](https://answerdotai.github.io/basedpl/glyphs/partial.html): for f(x) = 1 + 2x + 3x², f′(2) = 14.
|
|
204
204
|
|
|
205
205
|
``` bpl
|
|
206
206
|
f←[1 2 3]ₓ⌻ ⋄ f∂2ₓ
|
|
@@ -160,11 +160,11 @@ Under (`@`) transforms the argument, applies a function, then reverses the trans
|
|
|
160
160
|
|
|
161
161
|
1.2 2.7
|
|
162
162
|
|
|
163
|
-
Explore [iteration and inverses](https://answerdotai.github.io/basedpl/glyphs/
|
|
163
|
+
Explore [iteration and inverses](https://answerdotai.github.io/basedpl/glyphs/star-diaeresis.html), [Under](https://answerdotai.github.io/basedpl/glyphs/at.html), [windows](https://answerdotai.github.io/basedpl/glyphs/up-down-arrow.html) and [function selection](https://answerdotai.github.io/basedpl/glyphs/diamond-underbar.html).
|
|
164
164
|
|
|
165
165
|
### Mathematical tools
|
|
166
166
|
|
|
167
|
-
[Primes](https://answerdotai.github.io/basedpl/glyphs/
|
|
167
|
+
[Primes](https://answerdotai.github.io/basedpl/glyphs/stile-tilde.html) and [factorisation](https://answerdotai.github.io/basedpl/glyphs/circle-divide.html) are built in:
|
|
168
168
|
|
|
169
169
|
``` bpl
|
|
170
170
|
⨸360ₓ
|
|
@@ -172,7 +172,7 @@ Explore [iteration and inverses](https://answerdotai.github.io/basedpl/glyphs/po
|
|
|
172
172
|
|
|
173
173
|
[2 2 2 3 3 5]ₓ
|
|
174
174
|
|
|
175
|
-
[Polynomials](https://answerdotai.github.io/basedpl/glyphs/
|
|
175
|
+
[Polynomials](https://answerdotai.github.io/basedpl/glyphs/quad-jot.html) support coefficients, roots and evaluation. Polynomial functions can be [differentiated](https://answerdotai.github.io/basedpl/glyphs/partial.html): for f(x) = 1 + 2x + 3x², f′(2) = 14.
|
|
176
176
|
|
|
177
177
|
``` bpl
|
|
178
178
|
f←[1 2 3]ₓ⌻ ⋄ f∂2ₓ
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
],
|
|
7
7
|
"patterns": [
|
|
8
8
|
{
|
|
9
|
-
"begin": "
|
|
9
|
+
"begin": "[⍝注]",
|
|
10
10
|
"beginCaptures": {
|
|
11
11
|
"0": {
|
|
12
12
|
"name": "comment.line.bpl"
|
|
@@ -48,15 +48,15 @@
|
|
|
48
48
|
"name": "source.bpl"
|
|
49
49
|
},
|
|
50
50
|
{
|
|
51
|
-
"match": "
|
|
51
|
+
"match": "[•系][A-Za-z_∆⍙][A-Za-z0-9_∆⍙]*",
|
|
52
52
|
"name": "support.function.system.bpl"
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
|
-
"match": "
|
|
55
|
+
"match": "[¯负負]?[∞永]|[¯负負]?(\\d+([.内內]\\d+)?|[.内內]\\d+)([eEₑ][¯负負]?\\d+)?([jJⱼ][¯负負]?(\\d+([.内內]\\d+)?|[.内內]\\d+)([eEₑ][¯负負]?\\d+)?|ₓ|[rᵣ][¯负負]?\\d+)?",
|
|
56
56
|
"name": "constant.numeric.bpl"
|
|
57
57
|
},
|
|
58
58
|
{
|
|
59
|
-
"match": "
|
|
59
|
+
"match": "[⍬空]ₓ?",
|
|
60
60
|
"name": "constant.numeric.bpl"
|
|
61
61
|
},
|
|
62
62
|
{
|
|
@@ -85,23 +85,23 @@
|
|
|
85
85
|
}
|
|
86
86
|
},
|
|
87
87
|
{
|
|
88
|
-
"match": "[
|
|
88
|
+
"match": "[\\+加\\-减減×乘号號÷除⌈上⌊下\\|绝余絕餘\\*幂冪⍟对對○圆圓π周√根!阶拣階揀∧极且極∨析或⊼方否⊽双莫雙\\~非无無=等≠别初別<小≤限退>大≥达进達進⍳位↦至:键卸鍵⍴形≢数异數異≡同深,连連⍪接矩⊂包⊃选合選⊆巢段∊属展屬∪并独併獨∩交重⍋升⍒降↑取↓去拆⌽转轉⊖纵縱⍉翻⊤编編⊥译譯⍎行⍕文⌷索⌹解逆\\#复複↕窗⍭素⨸因⌻零值⍸处间處間⍷寻群尋⊢右⊣左¿掷抽擲]",
|
|
89
89
|
"name": "support.function.bpl"
|
|
90
90
|
},
|
|
91
91
|
{
|
|
92
|
-
"match": "[
|
|
92
|
+
"match": "[¨遍⍨己换換⊗表⌸组組⇄优優∂导梯導/总總⌿汇匯\\\\累⍀续續⁰¹²³⁴⁵⁶⁷⁸⁹⁻ᵀᵘ]",
|
|
93
93
|
"name": "keyword.operator.monadic.bpl"
|
|
94
94
|
},
|
|
95
95
|
{
|
|
96
|
-
"match": "[
|
|
96
|
+
"match": "[↣先⍤秩∘承⍠轴軸⍥经經↢后後\\.内內⍣次止⊘兼@于於⍚择擇⌺邻鄰]",
|
|
97
97
|
"name": "keyword.operator.dyadic.bpl"
|
|
98
98
|
},
|
|
99
99
|
{
|
|
100
|
-
"match": "[
|
|
100
|
+
"match": "[⍺甲⍵乙⍶丙⍹丁∇递遞⍢循]",
|
|
101
101
|
"name": "variable.parameter.bpl"
|
|
102
102
|
},
|
|
103
103
|
{
|
|
104
|
-
"match": "[
|
|
104
|
+
"match": "[←是⎕出入⋄句\\?若₀₁₂₃₄₅₆₇₈₉₋]",
|
|
105
105
|
"name": "keyword.control.bpl"
|
|
106
106
|
}
|
|
107
107
|
]
|