basedpl 0.1.76__tar.gz → 0.1.78__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.76 → basedpl-0.1.78}/.github/workflows/ci.yml +3 -5
- {basedpl-0.1.76 → basedpl-0.1.78}/.github/workflows/speed.yml +6 -2
- {basedpl-0.1.76 → basedpl-0.1.78}/.github/workflows/test.yml +5 -0
- basedpl-0.1.78/.node-version +1 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/CONTRIBUTING.md +1 -1
- {basedpl-0.1.76 → basedpl-0.1.78}/Cargo.lock +14 -11
- {basedpl-0.1.76 → basedpl-0.1.78}/Cargo.toml +7 -3
- {basedpl-0.1.76 → basedpl-0.1.78}/DEV.md +13 -5
- {basedpl-0.1.76 → basedpl-0.1.78}/PKG-INFO +3 -3
- {basedpl-0.1.76 → basedpl-0.1.78}/editors/jetbrains/README.md +1 -1
- {basedpl-0.1.76 → basedpl-0.1.78}/editors/windows/README.md +1 -1
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/.gitignore +3 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/study/05_searching-indexing.ipynb +408 -162
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/study/06_rearranging-arrays.ipynb +12 -6
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/syntax.qmd +1 -1
- {basedpl-0.1.76 → basedpl-0.1.78}/py/Cargo.toml +4 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/pyproject.toml +2 -2
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/bpltests.py +151 -5
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/editors.py +15 -13
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/lb.js +4 -4
- {basedpl-0.1.76 → basedpl-0.1.78}/src/eval/binder.rs +2 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/eval/bindings.rs +3 -1
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/speed/structure.bpl +2 -2
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/wasm.mjs +6 -4
- basedpl-0.1.76/nbs/playground/SAX2B-0.1.76.woff2 +0 -0
- basedpl-0.1.76/nbs/playground/bpl-editor-0.1.76.js +0 -471
- basedpl-0.1.76/python/basedpl/SAX2B-0.1.76.woff2 +0 -0
- basedpl-0.1.76/python/basedpl/bpl-editor-0.1.76.js +0 -471
- basedpl-0.1.76/python/basedpl/hpl.tmLanguage.json +0 -61
- basedpl-0.1.76/scripts/prep.py +0 -7
- {basedpl-0.1.76 → basedpl-0.1.78}/.cargo/config.toml +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/.gitattributes +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/.github/workflows/docs.yml +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/.gitignore +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/LICENSE +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/README.md +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/_config.yml +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/_layouts/default.html +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/build.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/editors/jetbrains/BPL.tmbundle/Syntaxes/bpl.tmLanguage.json +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/editors/jetbrains/BPL.tmbundle/Syntaxes/hpl.tmLanguage.json +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/editors/jetbrains/BPL.tmbundle/info.plist +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/editors/jetbrains/BPL.xml +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/editors/macos/BasedPL-de.txt +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/editors/macos/BasedPL-es.txt +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/editors/macos/BasedPL-fr.txt +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/editors/macos/BasedPL-uk.txt +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/editors/macos/BasedPL-us.txt +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/editors/vim/ftdetect/bpl.vim +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/editors/vim/syntax/bpl.vim +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/editors/windows/build.ps1 +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/editors/windows/install.ps1 +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/editors/windows/keyboard.c +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/editors/windows/keyboard.def +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/editors/windows/keyboard.rc +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/editors/windows/layout.h +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/index_files/figure-commonmark/cell-17-output-1.svg +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/index_files/figure-commonmark/cell-18-output-1.svg +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/index_files/figure-html/cell-17-output-1.svg +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/index_files/figure-html/cell-18-output-1.svg +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/lib/LICENSE-april +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/lib/README.md +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/lib/array.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/lib/dyalog.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/lib/graph.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/lib/numeric.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/lib/power.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/lib/regex.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/lib/string.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/lib/tree.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/_quarto.yml +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/arrays.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/assignment.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/autodiff.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/bpl.xml +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/bqn.xml +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/bracket-types.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/cli.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/comparison.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/composition.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/data.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/dfns.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/distributions.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/driver.js +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/dyalog.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/dyalog.xml +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/evaluation.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/fonts/BQN386B.woff2 +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/fonts/README.md +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/fonts/SAX2B.woff2 +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/fonts.css +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/gallery/attractor.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/gallery/boids.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/gallery/dragon.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/gallery/flow.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/gallery/mandelbrot.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/gallery/mandelbrot32.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/gallery/orbits.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/gallery/phyllotaxis.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/gallery/prefs.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/gallery/reaction.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/gallery.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/getting-started.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/_metadata.yml +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/alpha-underbar.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/alpha.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/at.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/backslash-bar.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/backslash.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/braces.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/brackets.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/bullet.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/circle-backslash.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/circle-bar.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/circle-diaeresis.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/circle-divide.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/circle-slash.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/circle-star.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/circle-stile.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/circle-times.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/circle.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/colon.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/comma-bar.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/comma.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/del-diaeresis.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/del-stile.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/del.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/delta-stile.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/diaeresis.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/diamond-underbar.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/diamond.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/domino.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/dot.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/down-arrow.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/down-shoe.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/down-tack.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/downstile.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/epsilon-underbar.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/epsilon.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/equal-underbar-slash.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/equal-underbar.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/equals.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/error-guard.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/exclamation.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/greater-than-or-equal.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/greater-than.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/hash.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/hydrant.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/infinity.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/inverted-question.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/iota-underbar.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/iota.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/jot-diaeresis.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/jot.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/lamp.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/left-arrow.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/left-shoe-underbar.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/left-shoe.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/left-tack.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/left-tail-arrow.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/less-than-or-equal.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/less-than.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/minus.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/not-equals.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/obelus.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/omega-underbar.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/omega.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/overbar.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/parentheses.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/partial.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/pi.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/plus.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/quad-colon.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/quad-diamond.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/quad-equal.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/quad-jot.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/quad.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/question.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/quote.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/radical.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/rho.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/right-arrow-from-bar.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/right-left-arrows.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/right-shoe.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/right-tack.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/right-tail-arrow.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/slash-bar.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/slash.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/squad.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/star-diaeresis.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/star.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/stile-tilde.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/stile.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/superscript-b.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/thorn.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/tilde-diaeresis.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/tilde.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/times.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/tricolon.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/up-arrow.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/up-down-arrow.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/up-shoe.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/up-tack.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/upstile.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/vee-bar.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/vee.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/wedge-bar.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/wedge.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs/zilde.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs-study.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/glyphs.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/hanzi-notation-zh.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/hanzi-notation.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/hpl.xml +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/index-notation.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/index.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/indexing.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/introspection.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/keyboard.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/keyed.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/llms.txt +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/magics.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/mathish.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/modules.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/nbdev.yml +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/notebooks.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/numbers.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/overview.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/papers/aplwiki-arrays.md +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/papers/brickman-depth-1-scalars.md +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/papers/mercer-based-system.md +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/performance.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/playground/bpl.js +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/playground/gallery.js +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/playground/monaco-worker.js +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/playground/page.js +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/playground/worker.js +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/playground.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/plot.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/principles.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/processes.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/puppy.jpg +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/python.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/regex.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/repl.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/scripts.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/sidebar.yml +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/strings.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/study/01_basics.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/study/02_functions.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/study/03_operators.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/study/04_nested-arrays.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/study/07_numerical-tools.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/style.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/styles.css +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/_metadata.yml +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/c.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/canvas.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/constants.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/copy.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/csv.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/date.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/decompose.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/deflate.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/delay.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/detach.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/distribution.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/edge.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/element.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/ex.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/explain.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/fetch.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/float.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/hash.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/host.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/image.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/index.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/js.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/json.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/literal.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/load.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/memory.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/metadata.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/mime.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/mkdir.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/nc.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/nget.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/nl.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/normalize.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/nput.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/path.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/plot.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/prefs.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/r.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/rand.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/readdir.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/remove.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/rename.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/signal.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/src.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/storage.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/svg.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/time.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/ucs.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/uuid.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/vfi.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system/xml.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/system-functions.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/terms.qmd +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/web.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/nbs/xml.ipynb +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/package-lock.json +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/package.json +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/provenance/README.md +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/provenance/aplcart.jsonl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/provenance/april.jsonl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/provenance/bqn.jsonl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/provenance/core.jsonl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/provenance/dyalog.jsonl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/provenance/ngn.jsonl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/py/build.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/py/src/lib.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/__init__.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/_modidx.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/__init__.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/fonts/BQN386B.ttf +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/fonts/LICENSE-BQN386 +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/fonts/LICENSE-SAX2 +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/fonts/SAX2B.ttf +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/macos/BasedPL-de.bundle/Contents/Info.plist +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/macos/BasedPL-de.bundle/Contents/Resources/BasedPL-de.icns +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/macos/BasedPL-de.bundle/Contents/Resources/BasedPL-de.keylayout +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/macos/BasedPL-de.bundle/Contents/Resources/en.lproj/InfoPlist.strings +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/macos/BasedPL-de.bundle/Contents/version.plist +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/macos/BasedPL-es.bundle/Contents/Info.plist +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/macos/BasedPL-es.bundle/Contents/Resources/BasedPL-es.icns +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/macos/BasedPL-es.bundle/Contents/Resources/BasedPL-es.keylayout +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/macos/BasedPL-es.bundle/Contents/Resources/en.lproj/InfoPlist.strings +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/macos/BasedPL-es.bundle/Contents/version.plist +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/macos/BasedPL-fr.bundle/Contents/Info.plist +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/macos/BasedPL-fr.bundle/Contents/Resources/BasedPL-fr.icns +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/macos/BasedPL-fr.bundle/Contents/Resources/BasedPL-fr.keylayout +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/macos/BasedPL-fr.bundle/Contents/Resources/en.lproj/InfoPlist.strings +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/macos/BasedPL-fr.bundle/Contents/version.plist +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/macos/BasedPL-uk.bundle/Contents/Info.plist +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/macos/BasedPL-uk.bundle/Contents/Resources/BasedPL-uk.icns +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/macos/BasedPL-uk.bundle/Contents/Resources/BasedPL-uk.keylayout +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/macos/BasedPL-uk.bundle/Contents/Resources/en.lproj/InfoPlist.strings +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/macos/BasedPL-uk.bundle/Contents/version.plist +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/macos/BasedPL-us.bundle/Contents/Info.plist +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/macos/BasedPL-us.bundle/Contents/Resources/BasedPL-us.icns +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/macos/BasedPL-us.bundle/Contents/Resources/BasedPL-us.keylayout +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/macos/BasedPL-us.bundle/Contents/Resources/en.lproj/InfoPlist.strings +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/assets/macos/BasedPL-us.bundle/Contents/version.plist +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/bpl.tmLanguage.json +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/dyalog.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/font.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/fonts.css +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/functions.py +0 -0
- {basedpl-0.1.76/nbs/playground → basedpl-0.1.78/python/basedpl}/hpl.tmLanguage.json +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/input.js +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/install.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/ipython.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/keyboards.json +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/keyboards.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/layout.json +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/notebook_runner.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/notebooks.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/printing.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/reference.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/syntax.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/windows_keyboard.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/python/basedpl/worker.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/rustfmt.toml +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/agreement.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/array/storage.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/array/text.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/array.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/batch.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/canvas.js +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/canvas.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/csv.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/data.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/date.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/derivative.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/display.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/distribution.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/element.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/error.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/eval/assign.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/eval/dissect.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/eval/idioms.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/eval/operators.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/eval/session.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/eval/tree.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/eval.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/execution.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/explain.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/files.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/fusion.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/host.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/host_web.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/image/codecs.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/image/imageio.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/image.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/inspection.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/jit.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/js.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/json.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/keyed.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/lib.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/linear.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/name.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/number.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/number_theory.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/optimize.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/pervasive.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/plan.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/plot.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/polynomial.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/primitive/indexing.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/primitive/numeric.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/primitive/search.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/primitive/structural.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/primitive.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/program/blocks.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/program/contraction.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/program/layout.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/program/run.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/program/trace.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/program/verify.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/program.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/protocol.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/reference.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/regex.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/search.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/selection.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/settings.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/symbols.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/syntax.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/system.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/timing.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/transform.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/src/xml.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/common/mod.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/conftest.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/core.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/derivatives.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/explain.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/highlighting.mjs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/input.mjs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/instructions.txt +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/jit.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/reference/LICENSE-aplcart +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/reference/LICENSE-april +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/reference/LICENSE-bqn +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/reference/LICENSE-bqncrate +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/reference/LICENSE-dyalog +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/reference/LICENSE-ngn +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/reference/README.md +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/reference/aplcart.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/reference/april.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/reference/bqn.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/reference/core.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/reference/distributions.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/reference/dyalog.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/reference/graphics.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/reference/lib.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/reference/ngn.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/reference/regex.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/reference/static-int32.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/reference/static.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/reference/support/april.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/reference/support/avl.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/reference/support/redblack.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/reference/support/sbst.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/reference/support/splay.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/reference.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/scaling.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/settings.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/speed/README.md +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/speed/arrays.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/speed/calls.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/speed/images.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/speed/maps.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/speed/models.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/speed/tables.bpl +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/speed.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/test_api.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/test_basic.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/test_bpltests.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/test_glyphs.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/test_graphics.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/test_install.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/test_instructions.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/test_ipython.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/test_kernel.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/test_keylayout.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/test_notebooks.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/test_reference.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/test_repl.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/test_windows_keyboard.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/test_worker.py +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/units.rs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/wasm-pkg.mjs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/wasm-speed.mjs +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/tests/windows_keyboard.c +0 -0
- {basedpl-0.1.76 → basedpl-0.1.78}/wheel/data/share/jupyter/kernels/bpl/kernel.json +0 -0
|
@@ -18,7 +18,7 @@ jobs:
|
|
|
18
18
|
runs-on: ${{ matrix.os }}
|
|
19
19
|
env:
|
|
20
20
|
# The Python-free `bpl` goes in the wheel, through `cargo stage`, and in the GitHub release.
|
|
21
|
-
STAGE_BPL: cargo stage --profile dist && mkdir -p bin && cp wheel/scripts/bpl bin/${{ matrix.binary }}
|
|
21
|
+
STAGE_BPL: cargo stage --profile dist --no-default-features && mkdir -p bin && cp wheel/scripts/bpl bin/${{ matrix.binary }}
|
|
22
22
|
steps:
|
|
23
23
|
- uses: actions/checkout@v7
|
|
24
24
|
- uses: dtolnay/rust-toolchain@stable
|
|
@@ -27,17 +27,15 @@ 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.29' && ${{ env.STAGE_BPL }}
|
|
31
31
|
- uses: PyO3/maturin-action@v1
|
|
32
32
|
with:
|
|
33
33
|
args: --profile dist --no-default-features --compression-level 9 --out dist -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/cp311-cp311/bin:$PATH" && python3.11 -m pip install 'fastws-cli>=0.0.
|
|
37
|
-
# The release build's own costs, for comparison with CI's. `basedpl.bpltests.logged_costs` reads this log. Timing never fails the release.
|
|
36
|
+
before-script-linux: export PATH="/opt/python/cp311-cp311/bin:$PATH" && python3.11 -m pip install 'fastws-cli>=0.0.29' && ${{ env.STAGE_BPL }}
|
|
38
37
|
- name: Time the release build
|
|
39
38
|
continue-on-error: true
|
|
40
|
-
timeout-minutes: 20
|
|
41
39
|
run: bin/${{ matrix.binary }} --costs tests/speed
|
|
42
40
|
- uses: actions/upload-artifact@v7
|
|
43
41
|
with:
|
|
@@ -14,8 +14,8 @@ jobs:
|
|
|
14
14
|
- uses: actions/setup-python@v7
|
|
15
15
|
with:
|
|
16
16
|
python-version: '3.12'
|
|
17
|
-
# This job times the `bpl` that releases ship, which `cargo stage --profile dist` builds, as the `Release` workflow does. `bpl --costs` prints every case's cost and budget for `basedpl.bpltests.logged_costs`. A case over its budget doesn't fail it. The job builds without a cache. The `Test` workflow's caches hold only test-profile builds.
|
|
18
|
-
- run: pip install 'fastws-cli>=0.0.
|
|
17
|
+
# This job times the `bpl` that releases ship, which `cargo stage --profile dist --no-default-features` builds, as the `Release` workflow does. `bpl --costs` prints every case's cost and budget for `basedpl.bpltests.logged_costs`. A case over its budget doesn't fail it. The job builds without a cache. The `Test` workflow's caches hold only test-profile builds.
|
|
18
|
+
- run: pip install 'fastws-cli>=0.0.29' && cargo stage --profile dist --no-default-features
|
|
19
19
|
- run: wheel/scripts/bpl --costs tests/speed
|
|
20
20
|
# `bpl-tests thread_scaling` times a large product, a 512×512 SVD and Hermitian eigendecomposition, a stack of QR decompositions and a large elementwise function on one thread and on as many threads as the runner has physical cores, up to 4. It fails when a case reaches less than half its expected gain. Speed budgets are single-thread measurements, so this is the check of multithreaded speed. It comes last, so that a failure here still leaves every cost logged. `lscpu` shows whether the VM reports which vCPUs share a physical core, which is how `thread_scaling` counts cores on Linux.
|
|
21
21
|
- run: lscpu
|
|
@@ -28,6 +28,10 @@ jobs:
|
|
|
28
28
|
- uses: dtolnay/rust-toolchain@stable
|
|
29
29
|
with:
|
|
30
30
|
targets: wasm32-unknown-unknown
|
|
31
|
+
# These wasm costs come from the V8 of the Node that `.node-version` pins, as in the `Test` workflow's `wasm` job.
|
|
32
|
+
- uses: actions/setup-node@v7
|
|
33
|
+
with:
|
|
34
|
+
node-version-file: .node-version
|
|
31
35
|
- run: cargo generate-lockfile
|
|
32
36
|
- uses: Swatinem/rust-cache@v2
|
|
33
37
|
with:
|
|
@@ -9,6 +9,7 @@ permissions:
|
|
|
9
9
|
contents: read
|
|
10
10
|
|
|
11
11
|
# In each job, every test step after the first runs even when an earlier step fails, to report every test's result in one run.
|
|
12
|
+
# A build step that runs past 10 minutes has stalled. These builds normally take about 3.
|
|
12
13
|
jobs:
|
|
13
14
|
test:
|
|
14
15
|
runs-on: ubicloud-standard-4-ubuntu-2604
|
|
@@ -47,6 +48,10 @@ jobs:
|
|
|
47
48
|
- uses: dtolnay/rust-toolchain@stable
|
|
48
49
|
with:
|
|
49
50
|
targets: wasm32-unknown-unknown
|
|
51
|
+
# V8's frame sizes decide the recursion test's margin. Each Node major keeps one V8 version. `.node-version` pins the major that both wasm jobs use.
|
|
52
|
+
- uses: actions/setup-node@v7
|
|
53
|
+
with:
|
|
54
|
+
node-version-file: .node-version
|
|
50
55
|
- run: cargo generate-lockfile
|
|
51
56
|
# The `Speed` workflow's `wasm` job restores this cache, by its `shared-key`.
|
|
52
57
|
- uses: Swatinem/rust-cache@v2
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
26
|
|
@@ -27,7 +27,7 @@ ship-rs-build
|
|
|
27
27
|
|
|
28
28
|
After Rust changes, run `cargo test` for the Rust tests, then `cargo develop` to install what `cargo test` built: the extension, and the native `bpl` command in your environment. Both use one compilation of each crate. `cargo develop` comes from `fastws-cli`, one of the development tools. Run `pip install -e '.[dev]'` again only when the package metadata changes. Use `cargo fastfmt`, not `cargo fmt`.
|
|
29
29
|
|
|
30
|
-
Before a release, run `
|
|
30
|
+
Before a release, run `bpl-tests prerelease` from the repository root. Among its steps, it writes the syntax highlighters' glyph lists and the macOS keyboard layout bundle, saves the notebooks' outputs, and runs nbdev's `prepare` to export, test and clean the notebooks and render the README. DEV.md's "Release" section lists every step.
|
|
31
31
|
|
|
32
32
|
## Did you find a bug?
|
|
33
33
|
|
|
@@ -99,7 +99,7 @@ checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5"
|
|
|
99
99
|
|
|
100
100
|
[[package]]
|
|
101
101
|
name = "basedpl"
|
|
102
|
-
version = "0.1.
|
|
102
|
+
version = "0.1.78"
|
|
103
103
|
dependencies = [
|
|
104
104
|
"base64 0.23.1",
|
|
105
105
|
"bytemuck",
|
|
@@ -148,7 +148,7 @@ dependencies = [
|
|
|
148
148
|
|
|
149
149
|
[[package]]
|
|
150
150
|
name = "basedpl-cli"
|
|
151
|
-
version = "0.1.
|
|
151
|
+
version = "0.1.78"
|
|
152
152
|
dependencies = [
|
|
153
153
|
"async-trait",
|
|
154
154
|
"basedpl",
|
|
@@ -162,14 +162,17 @@ dependencies = [
|
|
|
162
162
|
|
|
163
163
|
[[package]]
|
|
164
164
|
name = "basedpl-py"
|
|
165
|
-
version = "0.1.
|
|
165
|
+
version = "0.1.78"
|
|
166
166
|
dependencies = [
|
|
167
167
|
"basedpl",
|
|
168
|
+
"ctrlc",
|
|
169
|
+
"kernmini",
|
|
168
170
|
"num-bigint",
|
|
169
171
|
"num-complex",
|
|
170
172
|
"num-rational",
|
|
171
173
|
"pyo3",
|
|
172
174
|
"pyo3-build-config",
|
|
175
|
+
"rustyline",
|
|
173
176
|
"rustymath",
|
|
174
177
|
"rustymath-buffer",
|
|
175
178
|
"serde_json",
|
|
@@ -177,7 +180,7 @@ dependencies = [
|
|
|
177
180
|
|
|
178
181
|
[[package]]
|
|
179
182
|
name = "basedpl-wasm"
|
|
180
|
-
version = "0.1.
|
|
183
|
+
version = "0.1.78"
|
|
181
184
|
dependencies = [
|
|
182
185
|
"basedpl",
|
|
183
186
|
"js-sys",
|
|
@@ -1680,9 +1683,9 @@ dependencies = [
|
|
|
1680
1683
|
|
|
1681
1684
|
[[package]]
|
|
1682
1685
|
name = "rustymath"
|
|
1683
|
-
version = "0.1.
|
|
1686
|
+
version = "0.1.52"
|
|
1684
1687
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1685
|
-
checksum = "
|
|
1688
|
+
checksum = "9eb8e5ce5edc62d2314664c772662b48992258f6a42ea076053f2169b229c45e"
|
|
1686
1689
|
dependencies = [
|
|
1687
1690
|
"foldhash",
|
|
1688
1691
|
"half",
|
|
@@ -1701,9 +1704,9 @@ dependencies = [
|
|
|
1701
1704
|
|
|
1702
1705
|
[[package]]
|
|
1703
1706
|
name = "rustymath-buffer"
|
|
1704
|
-
version = "0.1.
|
|
1707
|
+
version = "0.1.52"
|
|
1705
1708
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1706
|
-
checksum = "
|
|
1709
|
+
checksum = "45f92e085b223eb9048ad95befcff11b849d4fa728d2dd31eb6ca76fc7c4390a"
|
|
1707
1710
|
dependencies = [
|
|
1708
1711
|
"pyo3",
|
|
1709
1712
|
"rustymath",
|
|
@@ -2057,9 +2060,9 @@ checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8"
|
|
|
2057
2060
|
|
|
2058
2061
|
[[package]]
|
|
2059
2062
|
name = "unicode-width"
|
|
2060
|
-
version = "0.2.
|
|
2063
|
+
version = "0.2.3"
|
|
2061
2064
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2062
|
-
checksum = "
|
|
2065
|
+
checksum = "ca718471876992059f251e33aafc334346ada08042b7661dd1fe313a9bced557"
|
|
2063
2066
|
|
|
2064
2067
|
[[package]]
|
|
2065
2068
|
name = "utf16_iter"
|
|
@@ -2447,7 +2450,7 @@ checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc"
|
|
|
2447
2450
|
|
|
2448
2451
|
[[package]]
|
|
2449
2452
|
name = "xtask"
|
|
2450
|
-
version = "0.1.
|
|
2453
|
+
version = "0.1.78"
|
|
2451
2454
|
dependencies = [
|
|
2452
2455
|
"anyhow",
|
|
2453
2456
|
"rustymath",
|
|
@@ -5,16 +5,20 @@ members = ["py"]
|
|
|
5
5
|
join_comments = true
|
|
6
6
|
|
|
7
7
|
[workspace.package]
|
|
8
|
-
version = "0.1.
|
|
8
|
+
version = "0.1.78"
|
|
9
9
|
edition = "2024"
|
|
10
10
|
rust-version = "1.98"
|
|
11
11
|
license = "Apache-2.0"
|
|
12
12
|
|
|
13
13
|
[workspace.dependencies]
|
|
14
|
-
rustymath = { version = ">=0.1.
|
|
15
|
-
rustymath-buffer = ">=0.1.
|
|
14
|
+
rustymath = { version = ">=0.1.52, <1", default-features = false }
|
|
15
|
+
rustymath-buffer = ">=0.1.52, <1"
|
|
16
16
|
pyo3 = ">=0.29.2, <1"
|
|
17
17
|
pyo3-build-config = ">=0.29.2, <1"
|
|
18
|
+
ctrlc = ">=3.5.2, <4"
|
|
19
|
+
kernmini = ">=0.1.22, <1"
|
|
20
|
+
# Custom bindings override Emacs Alt-digit prefixes in this fork.
|
|
21
|
+
rustyline = { git = "https://github.com/AnswerDotAI/rustyline.git", branch = "master", default-features = false, features = ["custom-bindings", "with-file-history"] }
|
|
18
22
|
|
|
19
23
|
[package]
|
|
20
24
|
name = "basedpl"
|
|
@@ -58,6 +58,8 @@ pytest -q
|
|
|
58
58
|
|
|
59
59
|
Use `cargo develop` to rebuild and install the native extension and `bpl` after Rust changes. It uses the `test` profile shared with `cargo test`. Cargo tests compile missing code but don't install it. Run plain `cargo test` while you work; use one test binary for a focused check. From a kernel, `fastws.cargo.run_tests(root, *args)` runs `cargo test` and returns the build's compiler messages and each test binary's results. Run `pytest -q` at the end of a piece of work. Before you report a `pytest` failure in code you didn't touch, run `cargo develop` and rerun it. Give builds three minutes and test runs one minute; Cargo serializes builds in the same target directory.
|
|
60
60
|
|
|
61
|
+
Before a stage's closing review and before a release, run the full checks: what CI runs, and the builds for the targets that this Mac's daily builds leave out. Run `cargo develop`, `cargo test`, `pytest -q`, `bpl-nb`, `nbdev-test`, `node tests/input.mjs` and `node tests/highlighting.mjs`. Then run `bpl-tests target_builds /tmp/<prefix>_wasm`, followed by `wasm_test(DIR)` and `wasm_test(DIR, speed=True)` on that directory. `target_builds` builds basedpl's and rustymath's libraries for Linux x86-64 and the browser package at once. "Codegen and rebuilds" says how to find the function that holds up a build that stays on one core for minutes.
|
|
62
|
+
|
|
61
63
|
Build nothing else without discussion: no scratch crates, alternate target directories, `--release`, `-p` or other-target builds. The documented build diagnostics, browser work and x86-64 inspection below are exceptions. Don't use `maturin develop`; its configuration does not reuse the normal local build.
|
|
62
64
|
|
|
63
65
|
When another agent's unfinished edits stop the shared tree compiling, run `cargo wait` with the Bash tool's `run_in_background`, then build after it exits. `cargo wait` comes from `fastws-cli`, as `cargo develop` does. It runs `cargo check` on every target of the workspace each time a source file or manifest of a local package changes, rustymath's included. It exits once the tree compiles, or after 30 minutes with the remaining errors. `cargo wait --path ~/aai-ws/rustymath` waits for rustymath's own workspace, its Python extension included. Use it rather than writing a wait loop.
|
|
@@ -122,11 +124,11 @@ Rust 1.98 or later supplies algebraic float operations. `test` inherits `release
|
|
|
122
124
|
|
|
123
125
|
`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.
|
|
124
126
|
|
|
125
|
-
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.
|
|
127
|
+
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. Release staging and wheel builds both pass `--no-default-features`. The released Mac builds therefore leave out rustymath's own linear algebra. The Python binding inherits the CLI's pure-Rust frontend dependencies to keep shared dependency features identical for release builds. On Apple targets, `flate2` uses the system zlib. Other targets keep its Rust backend, `miniz_oxide`.
|
|
126
128
|
|
|
127
129
|
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.
|
|
128
130
|
|
|
129
|
-
`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
|
|
131
|
+
`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 run on `ubicloud-standard-4-ubuntu-2604`, which is Ubuntu 26.04 on the `ubicloud-standard-4` VM size that speed budgets are set for. A build step that runs past 10 minutes fails. These steps normally take about 3. They generate a lockfile before restoring `Swatinem/rust-cache`, making dependency changes part of the cache key. `Speed` is manually triggered. Its `wasm` job restores the `Test` workflow's wasm cache. Its native job builds the `dist` profile without one.
|
|
130
132
|
|
|
131
133
|
`Release` runs separately on `v*` tags on GitHub's runners. It builds dist wheels, sdist, standalone CLI artifacts and the Windows keyboard archive, then publishes Python artifacts and the GitHub release. Its npm job publishes the stripped browser package through trusted publishing and purges jsDelivr's package files to avoid stale unversioned URLs. Release neither runs tests nor waits for the Test workflow.
|
|
132
134
|
|
|
@@ -140,6 +142,8 @@ Generic loop instances can concentrate in the defining module's codegen unit. A
|
|
|
140
142
|
|
|
141
143
|
Use `cargo build --lib --bins --profile test --timings` to inspect the normal build. Its report under `target/cargo-timings/` separates frontend and codegen time. `BASEDPL_UNITS=1 cargo test --test units -- --nocapture` lists large units and their functions. `BASEDPL_SIZES=pattern cargo test --test units -- --nocapture` measures machine code matching a demangled-name regex. `BASEDPL_SIZES` sees only basedpl's own codegen units. `BASEDPL_SIZES_DIFF=old:new cargo test --test units machine_code_growth -- --nocapture` compares two binaries, such as copies of `bpl` from before and after a change, by generic function across every crate. `BASEDPL_CALLS=pattern cargo test --test units -- --nocapture` lists each call from a function whose demangled name matches to a function in another codegen unit, in basedpl's build and in the rustymath rlib it links. Those calls stayed out of line through thin LTO. rustymath's DEV.md says which calls do, under "Loops and codegen". After an edit, `BASEDPL_RECOMPILED=pattern cargo test --test units -- --nocapture` lists the units that the rebuild compiled again, each with its biggest functions whose demangled names match. These commands diagnose the current compilation arrangement; don't create scratch builds to approximate it.
|
|
142
144
|
|
|
145
|
+
A build that stays on one core for minutes is usually waiting on one function that an LLVM pass takes minutes over. LLVM's loop vectorizer chooses each loop's vector width and interleave count from the target's cost model. A loop that it vectorizes in seconds for arm64 can take it minutes for x86-64. On macOS, `sample <pid> 5 -file /tmp/<prefix>_sample.txt` on the busy `rustc` shows the pass, such as `LoopVectorizePass` unrolling a loop by its interleave factor (`VPlanTransforms::unrollByUF`). The nightly toolchain names the function. `cargo +nightly rustc -p CRATE --lib --release --target x86_64-unknown-linux-gnu --target-dir /tmp/<prefix>_x86 --config 'build.rustc-wrapper=""' -- -Z llvm-time-trace` writes LLVM's time for each pass on each function to `CRATE-<hash>.llvm_timings.json` under the target directory. With sccache on, a cached crate writes no trace. A crate with C code also needs `CC_x86_64_unknown_linux_gnu=clang`. `rg -o '"dur":[0-9]{8,},"name":"[^"]*"(,"args":\{"detail":"[^"]*"\})?' FILE` lists the passes that took 100 s or more, with each function's mangled name. One crate's trace can be gigabytes. `cargo llvm-lines -p rustymath --lib --release --target x86_64-unknown-linux-gnu` lists each function's lines of unoptimized LLVM IR, with its copies. It shows where generic instances multiply, but not what LLVM does after inlining. `cargo wasm` builds `xtask` for the host, rustymath included. On CI's x86-64 runner, the wasm job therefore waits on any stall in rustymath's x86-64 build. After a change to inlining or to loops, time an x86-64 build of the crate. rustymath's DEV.md, under "Build time and code size", gives the command and describes the stall found in October 2026.
|
|
146
|
+
|
|
143
147
|
## Code map
|
|
144
148
|
|
|
145
149
|
| Files | Responsibility |
|
|
@@ -323,6 +327,8 @@ Browser `Session.run` streams MIME events and returns a protocol error or null.
|
|
|
323
327
|
|
|
324
328
|
The playground and gallery load released assets from jsDelivr, or local `nbs/playground/` assets on localhost. Shared `bpl.js` owns editors, worker startup and output. Restarting a trapped/stopped worker loses its state. `worker.js`, `page.js` and `gallery.js` own their respective protocols/UI; `nbs/driver.js` documents canvas drawing data. Gallery demos are `.bpl` sources with shared preferences, checked natively by `language_examples`. Browser recursion tests cover both V8 compilers and fail with LIMIT before stack exhaustion.
|
|
325
329
|
|
|
330
|
+
CI's two `wasm` jobs, in the `Test` and `Speed` workflows, take Node's version from `.node-version`. TurboFan's frame sizes vary between V8 versions by enough to decide whether a recursion test overflows. On 28 October 2026, one build's `each` shape needed 0.68 MB of stack to reach 171 levels under Node 24's TurboFan, against 0.62 MB under Node 26's. `tests/wasm.mjs` runs its depth checks with Node's 192 KB reserve plus 80% of the roughly 470 KB that a Chrome worker gives, 0.5575 MB in all. A build whose frames grow into the remaining 20% fails the test. In wasm, `Binder::reduce` and `Bindings::enter` stay out of line, to keep their locals out of the frames that stay on the stack at every level of recursion. To find a frame that grew, print each function's TurboFan frame size, in "stack slots", with `node --no-liftoff --print-wasm-code-function-index=N`. Measure with the test's own sequence in a fresh worker: code compiled once and shared across workers gets different frames.
|
|
331
|
+
|
|
326
332
|
## System functions and rendering
|
|
327
333
|
|
|
328
334
|
`system.rs` owns the system table: one `SystemFunction` for each system function, holding its case-insensitive name, call, valence, extension, result prototype and inverse. Its extension (`primitive::Extension`) is the field that each primitive's form holds too. A system function takes its right argument whole, or takes items (`primitive::Item`) and maps over a right argument that holds several, with its left argument whole for each. A function that takes text also maps over each row of a character matrix, as `⍎` does. A function that acts asks the running levels where it acts (`Context::acts`), as output and input do: where it reads or writes files, the network, the clock or the terminal, or makes something new on each call, as `•index` and `•rand` do. Any other system function asks nothing, and a batched run calls it once for each cell. The parser resolves a known system name to its table entry (`system::Entry`) through `Builtin::find`, which finds a glyph's primitive too, and `primitive::Builtin` holds either. A system name is therefore a `NodeKind::Function` node, compiles to a constant and resolves to the function that one process-wide table holds for each builtin (`Builtin::function`), as a glyph does. An unknown system name stays a `NodeKind::System` node, which is a VALUE error when evaluated. Code identifies a table function by the `Entry` that its `SystemFunction` records, as in `Entry::PREFS`, never by its name. A function that a factory made, such as `•element "div"`, has no entry, although it shares its factory's name. 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.
|
|
@@ -356,9 +362,9 @@ nbdev-test nbs/dyalog.ipynb --flags dyalog
|
|
|
356
362
|
nbdev-preview
|
|
357
363
|
```
|
|
358
364
|
|
|
359
|
-
Quarto renders saved outputs. `bpl-nb --save` updates notebook outputs without changing execution counts. Use it for BPL examples/figures and `nbdev-test` for Python notebook code. Rust `language_examples` checks BPL page/gallery examples; pytest checks Python page examples. Use `BASEDPL_PAGE` to focus page checks. Don't run a full documentation build for routine output updates.
|
|
365
|
+
Quarto renders saved outputs. `bpl-nb --save` updates notebook outputs without changing execution counts. Use it for BPL examples/figures and `nbdev-test` for Python notebook code. Rust `language_examples` checks BPL page/gallery examples; pytest checks Python page examples. Use `BASEDPL_PAGE` to focus page checks. Don't run a full documentation build for routine output updates. Before a release, `bpl-tests prerelease` runs editor generation and nbdev's preparation, as "Release" describes.
|
|
360
366
|
|
|
361
|
-
`basedpl.editors.write()` generates syntax grammars/highlighters, editor templates, keyboard sources/bundles and glyph metadata from shared Rust symbols and keyboard data. It also writes JetBrains assets and Windows `editors/windows/layout.h`. After a Rust change, run `python -m basedpl.editors` from the shell, because a running kernel keeps its old extension. `layout.json` owns composed input; captured `keyboards.json` supports generation without macOS. `basedpl.keyboards.capture()` refreshes native data when needed, and `keyboards.write()` generates regional macOS bundles/maps. Regenerate keyboard sources through these functions, not one-off kernel code. `basedpl-install` copies packaged fonts and macOS bundles from `python/basedpl/assets` to the user's directories. See `editors/jetbrains/README.md` and `editors/windows/README.md` for target-specific work. Rebuild the common icon only when its design changes.
|
|
367
|
+
`basedpl.editors.write()` generates syntax grammars/highlighters, editor templates, keyboard sources/bundles and glyph metadata from shared Rust symbols and keyboard data. It also writes JetBrains assets and Windows `editors/windows/layout.h`. It writes the browser editor module to `wasm/bpl-editor.js`. `cargo wasm` copies that module and `nbs/fonts/SAX2B.woff2` into the npm package and the playground. After a Rust change, run `python -m basedpl.editors` from the shell, because a running kernel keeps its old extension. `layout.json` owns composed input; captured `keyboards.json` supports generation without macOS. `basedpl.keyboards.capture()` refreshes native data when needed, and `keyboards.write()` generates regional macOS bundles/maps. Regenerate keyboard sources through these functions, not one-off kernel code. `basedpl-install` copies packaged fonts and macOS bundles from `python/basedpl/assets` to the user's directories. See `editors/jetbrains/README.md` and `editors/windows/README.md` for target-specific work. Rebuild the common icon only when its design changes.
|
|
362
368
|
|
|
363
369
|
`nbs/bpl.xml`, the APL/BQN grammars and vim rules share generated glyph classes. `hpl.xml` includes BPL and adds Hanzi aliases from the same symbol table. Use `hpl` fences for Hanzi highlighting, `bpl` for Hanzi names. For Hanzi notebooks, set `kernelspec.language` to `hpl` and keep `kernelspec.name` as `bpl`. These labels do not enable runtime Hanzi aliases. TextMate exports feed Monaco/Shiki. `fonts.css` owns the BPL/APL font choices; rerun affected magics after changing them. `tests/highlighting.mjs`, `input.mjs`, keylayout/Windows tests and glyph-page checks cover their respective generated interfaces. All artifact generation belongs in repository functions/scripts, not ad hoc kernel transformations.
|
|
364
370
|
|
|
@@ -366,6 +372,8 @@ Quarto renders saved outputs. `bpl-nb --save` updates notebook outputs without c
|
|
|
366
372
|
|
|
367
373
|
Before approval, verify successful tests for the release commit and the relevant installed artifacts. Reserve isolated wheel installs for packaging-sensitive work or release preparation, using a small relevant subset of existing tests. `ship-rs-build --profile dist` builds the distributed configuration; bare `ship-rs-build` uses release for local checks.
|
|
368
374
|
|
|
369
|
-
|
|
375
|
+
Before each release, run `bpl-tests prerelease` from basedpl's root, in a shell rather than a kernel, while no one else is editing either repository. It runs both repositories' release checks and saves. First come the builds, tests and saves, in parallel, with each step starting once the steps whose output it reads have passed. In each repository these are `cargo develop`, `pytest -q`, `nbdev-prepare`, and `cargo test --profile checked` in a target directory of its own. basedpl adds editor generation, the Node input and highlighting tests, and `bpl-nb --save`. `target_builds` runs beside them, followed by `wasm_test` on its browser build. Then the timings run one at a time, with nothing else running: `cargo test` in each repository with `<NAME>_COSTS` set, rustymath's Python speed test, `thread_scaling` and the browser speed test. Last, `nbdev-clean` runs in both repositories, even after a failure. The first failure ends the run, unless `--keep-going` is given. The summary gives each step's status, time and log. `--dry-run` lists the steps in their order without running them. Before it starts, the run stops if `node_modules` or the Node version that `.node-version` names is missing. It also notes when basedpl needs an unreleased rustymath version, because rustymath then ships first. The run never commits, pushes or tags.
|
|
376
|
+
|
|
377
|
+
The run's `cargo test --profile checked` uses the test profile with debug assertions on, which adds `session()`'s turn check and the standard library's checks in unsafe code. Those checks cost 12 to 55% per call, too much for the test profile that the budgets measure. The speed and scaling tests mark themselves ignored under debug assertions, so that run checks correctness only.
|
|
370
378
|
|
|
371
379
|
Confirm the clean tree and `[workspace.package].version`, then run `ship-release` without flags. Python gets that version through `dynamic = ["version"]`. Fastship pushes/tags the current version, leaves publication to the Release workflow and bumps Cargo without rebuilding. There is no changelog step. Never commit, push, tag or publish without approval.
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: basedpl
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.78
|
|
4
4
|
Classifier: Programming Language :: Rust
|
|
5
5
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
6
6
|
Requires-Dist: fastcore
|
|
7
7
|
Requires-Dist: jupyter-core
|
|
8
8
|
Requires-Dist: fastship>=0.0.11 ; extra == 'dev'
|
|
9
|
-
Requires-Dist: fastws-cli>=0.0.
|
|
10
|
-
Requires-Dist: maturin>=1.
|
|
9
|
+
Requires-Dist: fastws-cli>=0.0.29 ; extra == 'dev'
|
|
10
|
+
Requires-Dist: maturin>=1.13,<2.0 ; extra == 'dev'
|
|
11
11
|
Requires-Dist: pytest ; extra == 'dev'
|
|
12
12
|
Requires-Dist: pytest-timeout ; extra == 'dev'
|
|
13
13
|
Requires-Dist: numpy ; extra == 'dev'
|
|
@@ -40,4 +40,4 @@ The XML uses JetBrains' `OTHER` (Everywhere) context. To limit applicability, re
|
|
|
40
40
|
|
|
41
41
|
## Generation
|
|
42
42
|
|
|
43
|
-
`basedpl.editors.write()`,
|
|
43
|
+
`basedpl.editors.write()`, which `bpl-tests prerelease` runs, generates the templates from BPL's shared glyph names and aliases and copies the shared grammar into the bundle. Edit the generators or source metadata, not the generated files.
|
|
@@ -22,7 +22,7 @@ Remove the layout from your keyboard list before updating it. If Windows reports
|
|
|
22
22
|
|
|
23
23
|
## Build
|
|
24
24
|
|
|
25
|
-
`basedpl.editors.write()` generates `layout.h` from `python/basedpl/layout.json` during `
|
|
25
|
+
`basedpl.editors.write()` generates `layout.h` from `python/basedpl/layout.json` during `bpl-tests prerelease`. `keyboard.c` supplies the standard US scan-code and modifier tables.
|
|
26
26
|
|
|
27
27
|
Install Microsoft's [C++ Build Tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/) with **C++ core build tools**, **MSVC x64/x86**, **MSVC ARM64**, **MSVC ARM64EC** and a **Windows SDK**. From the repository, run:
|
|
28
28
|
|