basedpl 0.1.80__tar.gz → 0.1.82__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.80 → basedpl-0.1.82}/Cargo.lock +5 -5
- {basedpl-0.1.80 → basedpl-0.1.82}/Cargo.toml +1 -1
- {basedpl-0.1.80 → basedpl-0.1.82}/DEV.md +4 -4
- {basedpl-0.1.80 → basedpl-0.1.82}/PKG-INFO +2 -2
- {basedpl-0.1.80 → basedpl-0.1.82}/editors/windows/README.md +1 -1
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/.gitignore +1 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/fonts/README.md +1 -1
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/fonts.css +1 -1
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/gallery.qmd +1 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/magics.ipynb +14 -32
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/playground/bpl.js +5 -7
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/playground.qmd +1 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/repl.qmd +1 -1
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/web.ipynb +11 -9
- {basedpl-0.1.80 → basedpl-0.1.82}/package.json +1 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/pyproject.toml +3 -2
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/__init__.py +3 -2
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/_modidx.py +0 -2
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/bpltests.py +5 -6
- basedpl-0.1.82/python/basedpl/browser/bpl-editor.js +32 -0
- {basedpl-0.1.80/python/basedpl → basedpl-0.1.82/python/basedpl/browser}/input.js +2 -2
- basedpl-0.1.82/python/basedpl/browser/language.js +3 -0
- {basedpl-0.1.80/python/basedpl → basedpl-0.1.82/python/basedpl/browser}/lb.js +42 -41
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/editors.py +4 -21
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/font.py +2 -2
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/fonts.css +1 -1
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/keyboards.py +2 -2
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/notebooks.py +4 -17
- {basedpl-0.1.80 → basedpl-0.1.82}/src/symbols.rs +2 -2
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/highlighting.mjs +1 -1
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/input.mjs +3 -2
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/speed.rs +4 -1
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/test_api.py +4 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/test_kernel.py +1 -1
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/test_repl.py +1 -1
- {basedpl-0.1.80 → basedpl-0.1.82}/.cargo/config.toml +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/.gitattributes +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/.github/workflows/ci.yml +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/.github/workflows/docs.yml +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/.github/workflows/speed.yml +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/.github/workflows/test.yml +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/.gitignore +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/.node-version +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/CONTRIBUTING.md +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/LICENSE +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/README.md +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/_config.yml +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/_layouts/default.html +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/build.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/editors/jetbrains/BPL.tmbundle/Syntaxes/bpl.tmLanguage.json +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/editors/jetbrains/BPL.tmbundle/Syntaxes/hpl.tmLanguage.json +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/editors/jetbrains/BPL.tmbundle/info.plist +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/editors/jetbrains/BPL.xml +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/editors/jetbrains/README.md +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/editors/macos/BasedPL-de.txt +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/editors/macos/BasedPL-es.txt +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/editors/macos/BasedPL-fr.txt +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/editors/macos/BasedPL-uk.txt +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/editors/macos/BasedPL-us.txt +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/editors/vim/ftdetect/bpl.vim +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/editors/vim/syntax/bpl.vim +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/editors/windows/build.ps1 +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/editors/windows/install.ps1 +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/editors/windows/keyboard.c +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/editors/windows/keyboard.def +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/editors/windows/keyboard.rc +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/editors/windows/layout.h +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/index_files/figure-commonmark/cell-17-output-1.svg +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/index_files/figure-commonmark/cell-18-output-1.svg +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/index_files/figure-html/cell-17-output-1.svg +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/index_files/figure-html/cell-18-output-1.svg +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/lib/LICENSE-april +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/lib/README.md +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/lib/array.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/lib/dyalog.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/lib/graph.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/lib/numeric.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/lib/power.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/lib/regex.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/lib/string.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/lib/tree.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/_quarto.yml +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/arrays.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/assignment.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/autodiff.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/bpl.xml +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/bqn.xml +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/bracket-types.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/cli.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/comparison.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/composition.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/data.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/dfns.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/distributions.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/driver.js +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/dyalog.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/dyalog.xml +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/evaluation.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/fonts/BQN386B.woff2 +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/gallery/attractor.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/gallery/boids.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/gallery/dragon.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/gallery/flow.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/gallery/mandelbrot.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/gallery/mandelbrot32.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/gallery/orbits.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/gallery/phyllotaxis.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/gallery/prefs.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/gallery/reaction.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/getting-started.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/_metadata.yml +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/alpha-underbar.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/alpha.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/at.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/backslash-bar.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/backslash.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/braces.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/brackets.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/bullet.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/circle-backslash.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/circle-bar.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/circle-diaeresis.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/circle-divide.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/circle-slash.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/circle-star.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/circle-stile.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/circle-times.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/circle.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/colon.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/comma-bar.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/comma.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/del-diaeresis.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/del-stile.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/del.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/delta-stile.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/diaeresis.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/diamond-underbar.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/diamond.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/domino.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/dot.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/down-arrow.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/down-shoe.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/down-tack.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/downstile.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/epsilon-underbar.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/epsilon.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/equal-underbar-slash.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/equal-underbar.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/equals.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/error-guard.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/exclamation.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/greater-than-or-equal.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/greater-than.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/hash.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/hydrant.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/infinity.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/inverted-question.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/iota-underbar.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/iota.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/jot-diaeresis.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/jot.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/lamp.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/left-arrow.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/left-shoe-underbar.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/left-shoe.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/left-tack.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/left-tail-arrow.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/less-than-or-equal.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/less-than.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/minus.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/not-equals.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/obelus.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/omega-underbar.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/omega.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/overbar.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/parentheses.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/partial.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/pi.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/plus.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/quad-colon.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/quad-diamond.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/quad-equal.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/quad-jot.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/quad.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/question.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/quote.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/radical.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/rho.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/right-arrow-from-bar.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/right-left-arrows.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/right-shoe.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/right-tack.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/right-tail-arrow.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/slash-bar.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/slash.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/squad.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/star-diaeresis.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/star.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/stile-tilde.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/stile.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/superscript-b.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/thorn.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/tilde-diaeresis.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/tilde.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/times.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/tricolon.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/up-arrow.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/up-down-arrow.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/up-shoe.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/up-tack.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/upstile.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/vee-bar.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/vee.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/wedge-bar.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/wedge.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs/zilde.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs-study.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/glyphs.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/hanzi-notation-zh.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/hanzi-notation.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/hpl.xml +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/index-notation.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/index.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/indexing.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/introspection.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/keyboard.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/keyed.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/llms.txt +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/mathish.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/modules.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/nbdev.yml +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/notebooks.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/numbers.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/overview.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/papers/aplwiki-arrays.md +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/papers/brickman-depth-1-scalars.md +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/papers/mercer-based-system.md +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/performance.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/playground/gallery.js +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/playground/monaco-worker.js +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/playground/page.js +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/playground/worker.js +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/plot.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/principles.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/processes.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/puppy.jpg +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/python.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/regex.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/scripts.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/sidebar.yml +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/strings.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/study/01_basics.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/study/02_functions.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/study/03_operators.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/study/04_nested-arrays.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/study/05_searching-indexing.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/study/06_rearranging-arrays.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/study/07_numerical-tools.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/style.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/styles.css +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/syntax.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/_metadata.yml +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/c.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/canvas.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/constants.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/copy.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/csv.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/date.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/decompose.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/deflate.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/delay.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/detach.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/distribution.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/edge.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/element.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/ex.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/explain.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/fetch.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/float.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/hash.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/host.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/image.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/index.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/js.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/json.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/literal.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/load.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/memory.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/metadata.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/mime.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/mkdir.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/nc.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/nget.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/nl.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/normalize.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/nput.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/path.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/plot.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/prefs.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/r.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/rand.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/readdir.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/remove.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/rename.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/signal.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/src.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/storage.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/svg.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/time.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/ucs.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/uuid.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/vfi.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system/xml.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/system-functions.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/terms.qmd +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/nbs/xml.ipynb +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/package-lock.json +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/provenance/README.md +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/provenance/aplcart.jsonl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/provenance/april.jsonl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/provenance/bqn.jsonl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/provenance/core.jsonl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/provenance/dyalog.jsonl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/provenance/ngn.jsonl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/py/Cargo.toml +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/py/build.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/py/src/lib.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/__init__.py +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/fonts/BQN386B.ttf +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/fonts/LICENSE-BQN386 +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/fonts/LICENSE-SAX2 +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/fonts/SAX2B.ttf +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/macos/BasedPL-de.bundle/Contents/Info.plist +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/macos/BasedPL-de.bundle/Contents/Resources/BasedPL-de.icns +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/macos/BasedPL-de.bundle/Contents/Resources/BasedPL-de.keylayout +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/macos/BasedPL-de.bundle/Contents/Resources/en.lproj/InfoPlist.strings +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/macos/BasedPL-de.bundle/Contents/version.plist +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/macos/BasedPL-es.bundle/Contents/Info.plist +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/macos/BasedPL-es.bundle/Contents/Resources/BasedPL-es.icns +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/macos/BasedPL-es.bundle/Contents/Resources/BasedPL-es.keylayout +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/macos/BasedPL-es.bundle/Contents/Resources/en.lproj/InfoPlist.strings +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/macos/BasedPL-es.bundle/Contents/version.plist +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/macos/BasedPL-fr.bundle/Contents/Info.plist +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/macos/BasedPL-fr.bundle/Contents/Resources/BasedPL-fr.icns +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/macos/BasedPL-fr.bundle/Contents/Resources/BasedPL-fr.keylayout +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/macos/BasedPL-fr.bundle/Contents/Resources/en.lproj/InfoPlist.strings +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/macos/BasedPL-fr.bundle/Contents/version.plist +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/macos/BasedPL-uk.bundle/Contents/Info.plist +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/macos/BasedPL-uk.bundle/Contents/Resources/BasedPL-uk.icns +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/macos/BasedPL-uk.bundle/Contents/Resources/BasedPL-uk.keylayout +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/macos/BasedPL-uk.bundle/Contents/Resources/en.lproj/InfoPlist.strings +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/macos/BasedPL-uk.bundle/Contents/version.plist +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/macos/BasedPL-us.bundle/Contents/Info.plist +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/macos/BasedPL-us.bundle/Contents/Resources/BasedPL-us.icns +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/macos/BasedPL-us.bundle/Contents/Resources/BasedPL-us.keylayout +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/macos/BasedPL-us.bundle/Contents/Resources/en.lproj/InfoPlist.strings +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/assets/macos/BasedPL-us.bundle/Contents/version.plist +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/bpl.tmLanguage.json +0 -0
- {basedpl-0.1.80/nbs/fonts → basedpl-0.1.82/python/basedpl/browser}/SAX2B.woff2 +0 -0
- {basedpl-0.1.80/python/basedpl → basedpl-0.1.82/python/basedpl/browser}/layout.json +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/dyalog.py +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/functions.py +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/hpl.tmLanguage.json +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/install.py +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/ipython.py +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/keyboards.json +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/notebook_runner.py +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/printing.py +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/reference.py +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/syntax.py +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/windows_keyboard.py +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/python/basedpl/worker.py +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/rustfmt.toml +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/agreement.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/array/storage.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/array/text.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/array.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/batch.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/canvas.js +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/canvas.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/csv.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/data.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/date.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/derivative.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/display.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/distribution.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/element.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/error.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/eval/assign.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/eval/binder.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/eval/bindings.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/eval/dissect.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/eval/idioms.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/eval/operators.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/eval/session.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/eval/tree.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/eval.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/execution.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/explain.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/files.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/fusion.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/host.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/host_web.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/image/codecs.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/image/imageio.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/image.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/inspection.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/jit.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/js.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/json.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/keyed.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/lib.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/linear.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/name.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/number.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/number_theory.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/optimize.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/pervasive.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/plan.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/plot.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/polynomial.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/primitive/indexing.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/primitive/numeric.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/primitive/search.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/primitive/structural.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/primitive.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/program/blocks.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/program/contraction.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/program/layout.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/program/run.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/program/trace.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/program/verify.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/program.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/protocol.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/reference.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/regex.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/search.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/selection.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/settings.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/syntax.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/system.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/timing.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/transform.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/src/xml.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/common/mod.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/conftest.py +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/core.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/derivatives.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/explain.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/instructions.txt +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/jit.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/reference/LICENSE-aplcart +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/reference/LICENSE-april +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/reference/LICENSE-bqn +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/reference/LICENSE-bqncrate +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/reference/LICENSE-dyalog +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/reference/LICENSE-ngn +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/reference/README.md +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/reference/aplcart.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/reference/april.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/reference/bqn.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/reference/core.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/reference/distributions.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/reference/dyalog.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/reference/graphics.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/reference/lib.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/reference/ngn.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/reference/regex.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/reference/static-int32.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/reference/static.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/reference/support/april.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/reference/support/avl.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/reference/support/redblack.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/reference/support/sbst.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/reference/support/splay.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/reference.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/scaling.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/settings.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/speed/README.md +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/speed/arrays.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/speed/calls.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/speed/images.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/speed/maps.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/speed/models.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/speed/structure.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/speed/tables.bpl +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/test_basic.py +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/test_bpltests.py +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/test_glyphs.py +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/test_graphics.py +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/test_install.py +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/test_instructions.py +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/test_ipython.py +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/test_keylayout.py +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/test_notebooks.py +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/test_reference.py +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/test_windows_keyboard.py +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/test_worker.py +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/units.rs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/wasm-pkg.mjs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/wasm-speed.mjs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/wasm.mjs +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/tests/windows_keyboard.c +0 -0
- {basedpl-0.1.80 → basedpl-0.1.82}/wheel/data/share/jupyter/kernels/bpl/kernel.json +0 -0
|
@@ -99,7 +99,7 @@ checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5"
|
|
|
99
99
|
|
|
100
100
|
[[package]]
|
|
101
101
|
name = "basedpl"
|
|
102
|
-
version = "0.1.
|
|
102
|
+
version = "0.1.82"
|
|
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.82"
|
|
152
152
|
dependencies = [
|
|
153
153
|
"async-trait",
|
|
154
154
|
"basedpl",
|
|
@@ -162,7 +162,7 @@ dependencies = [
|
|
|
162
162
|
|
|
163
163
|
[[package]]
|
|
164
164
|
name = "basedpl-py"
|
|
165
|
-
version = "0.1.
|
|
165
|
+
version = "0.1.82"
|
|
166
166
|
dependencies = [
|
|
167
167
|
"basedpl",
|
|
168
168
|
"ctrlc",
|
|
@@ -180,7 +180,7 @@ dependencies = [
|
|
|
180
180
|
|
|
181
181
|
[[package]]
|
|
182
182
|
name = "basedpl-wasm"
|
|
183
|
-
version = "0.1.
|
|
183
|
+
version = "0.1.82"
|
|
184
184
|
dependencies = [
|
|
185
185
|
"basedpl",
|
|
186
186
|
"js-sys",
|
|
@@ -2464,7 +2464,7 @@ checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc"
|
|
|
2464
2464
|
|
|
2465
2465
|
[[package]]
|
|
2466
2466
|
name = "xtask"
|
|
2467
|
-
version = "0.1.
|
|
2467
|
+
version = "0.1.82"
|
|
2468
2468
|
dependencies = [
|
|
2469
2469
|
"anyhow",
|
|
2470
2470
|
"rustymath",
|
|
@@ -325,7 +325,7 @@ The Jupyter adapter in `cli/src/kernel.rs` uses kernmini and a `ThreadWorker`. I
|
|
|
325
325
|
|
|
326
326
|
Browser `Session.run` streams MIME events and returns a protocol error or null. `eval` transfers values through `js.rs` but discards output and cannot export BPL functions/operators; `bind` imports page values/functions. Typed arrays transfer without another page-worker copy. JavaScript functions live in a thread-local registry and core function nodes hold slots, preserving Send/Sync values. `host_web.rs` implements the browser's clock, synchronous I/O/fetch and RegExp behaviour. File/URL reads resolve against the configured base. Unsupported native filesystem/locale operations stay unavailable; browser `•nput` writes only stdout and `•js` is browser-only.
|
|
327
327
|
|
|
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.
|
|
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. The authored ES modules and font in `python/basedpl/browser/` need no evaluator: `browser/bpl-editor.js` exports grammar/configuration/editor options/font installation and explicit `install()`. Importing data never mounts the bar. Solveit, the playground and the gallery supply a normal-flow `#bpl-toolbar` slot; elsewhere the same component overlays the page without padding or height adjustment. One persisted collapse button keeps keyboard input active. `install()` reuses a connected controller; its `dispose()` closes it. Python magics call Solveit's `window.loadBplInput()` when present, otherwise import the same public module from jsDelivr. 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.
|
|
329
329
|
|
|
330
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. CI's x86-64 V8 takes more stack per level than Apple silicon's. The browser's depth limit, `MAX_CALL_DEPTH` in `src/eval.rs`, allows for levels up to 1.48 times their size on Apple silicon. `basedpl.bpltests.wasm_stack(DIR)` measures the stack that each recursion shape takes per level and below its first level. The limit is set from those figures. 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`. `wasm_stack` runs each trial in a fresh `node` process whose worker compiles the module, as the test's worker does. Code compiled once and shared across workers gets different frames.
|
|
331
331
|
|
|
@@ -362,9 +362,9 @@ nbdev-test nbs/dyalog.ipynb --flags dyalog
|
|
|
362
362
|
nbdev-preview
|
|
363
363
|
```
|
|
364
364
|
|
|
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
|
|
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 the normal development build and nbdev's preparation, as "Release" describes.
|
|
366
366
|
|
|
367
|
-
`basedpl.editors
|
|
367
|
+
`cargo develop` and `ws-sync` run `basedpl.editors` in a fresh Python process after installing the extension and before copying wheel data. It generates grammars/highlighters, editor templates, keyboard bundles and glyph metadata, including Rust-derived `browser/language.js`. JavaScript UI changes are authored modules read directly by Vite: no generator or npm refresh. `cargo wasm` copies the whole browser directory into the npm package and local playground. `browser/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 the normal build, not one-off transformations. `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.
|
|
368
368
|
|
|
369
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.
|
|
370
370
|
|
|
@@ -372,7 +372,7 @@ Quarto renders saved outputs. `bpl-nb --save` updates notebook outputs without c
|
|
|
372
372
|
|
|
373
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.
|
|
374
374
|
|
|
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
|
|
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's development build includes editor generation; its Node tests, notebooks and `target_builds` wait for that fresh data. Browser tests follow `target_builds`. 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
376
|
|
|
377
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.
|
|
378
378
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: basedpl
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.82
|
|
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.
|
|
9
|
+
Requires-Dist: fastws-cli>=0.0.32 ; extra == 'dev'
|
|
10
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'
|
|
@@ -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/browser/layout.json` during `cargo develop`. `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
|
|
|
@@ -11,6 +11,6 @@ from basedpl.font import build
|
|
|
11
11
|
build()
|
|
12
12
|
```
|
|
13
13
|
|
|
14
|
-
This writes installable TTF files and licences into `python/basedpl/assets/fonts`, and WOFF2
|
|
14
|
+
This writes installable TTF files and licences into `python/basedpl/assets/fonts`, SAX2B's WOFF2 into `python/basedpl/browser`, and BQN386B's WOFF2 into `nbs/fonts`. Run `basedpl-install` to install both fonts for your user. The source versions are pinned in `basedpl.font`. BQN386B has its own family name to distinguish it from an installed upstream BQN386.
|
|
15
15
|
|
|
16
16
|
The BPL symbols `⇄`, `∂`, and `⨸` are still missing from SAX2B.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Code fonts for the magics and the docs. The docs load this file through the symlink nbs/fonts.css. */
|
|
2
2
|
:root { --bpl-font: SAX2B; --apl-font: BQN386B; }
|
|
3
|
-
@font-face { font-family: SAX2B; src: url("https://cdn.jsdelivr.net/gh/AnswerDotAI/basedpl@main/
|
|
3
|
+
@font-face { font-family: SAX2B; src: url("https://cdn.jsdelivr.net/gh/AnswerDotAI/basedpl@main/python/basedpl/browser/SAX2B.woff2") format("woff2"); }
|
|
4
4
|
@font-face { font-family: BQN386B; src: local("BQN386B"), url("https://cdn.jsdelivr.net/gh/AnswerDotAI/basedpl@main/nbs/fonts/BQN386B.woff2") format("woff2"); }
|
|
5
5
|
.bpl_out { font-family: var(--bpl-font), monospace !important; line-height: 1.05 !important; }
|
|
6
6
|
.bpl_page_bar { --bpl-bar-background: #eee; --bpl-bar-color: #111; }
|
|
@@ -9,6 +9,7 @@ Choose a demo to run it. The **Code** tab holds its BPL, which you can edit and
|
|
|
9
9
|
|
|
10
10
|
::: {.column-screen-inset-right}
|
|
11
11
|
```{=html}
|
|
12
|
+
<div id="bpl-toolbar"></div>
|
|
12
13
|
<div id="gallery">
|
|
13
14
|
<nav id="demos" class="nav nav-pills flex-column">
|
|
14
15
|
<a class="nav-link" href="#attractor"></a>
|
|
@@ -31,15 +31,14 @@
|
|
|
31
31
|
},
|
|
32
32
|
"outputs": [],
|
|
33
33
|
"source": [
|
|
34
|
-
"import html,
|
|
35
|
-
"from importlib.resources import files\n",
|
|
34
|
+
"import html, re, basedpl\n",
|
|
36
35
|
"from fastcore.utils import *\n",
|
|
37
36
|
"from basedpl import symbols\n",
|
|
38
37
|
"from basedpl.ipython import load_ipython_extension as _load_help\n",
|
|
39
38
|
"from IPython.core.completer import context_matcher, SimpleCompletion\n",
|
|
40
39
|
"from IPython import get_ipython\n",
|
|
41
|
-
"from IPython.display import display, Javascript
|
|
42
|
-
"from IPython.paths import get_ipython_dir
|
|
40
|
+
"from IPython.display import display, Javascript\n",
|
|
41
|
+
"from IPython.paths import get_ipython_dir"
|
|
43
42
|
]
|
|
44
43
|
},
|
|
45
44
|
{
|
|
@@ -156,7 +155,7 @@
|
|
|
156
155
|
"id": "793cb644",
|
|
157
156
|
"metadata": {},
|
|
158
157
|
"source": [
|
|
159
|
-
"
|
|
158
|
+
"Each execution emits a small CDN script load. The browser keeps one toolbar, including when a dialog is reopened on the same kernel."
|
|
160
159
|
]
|
|
161
160
|
},
|
|
162
161
|
{
|
|
@@ -171,26 +170,7 @@
|
|
|
171
170
|
"outputs": [],
|
|
172
171
|
"source": [
|
|
173
172
|
"class BPLMagic:\n",
|
|
174
|
-
" \"IPython BPL magics that evaluate in the workspace `basedpl.bpl`.\"
|
|
175
|
-
" def __init__(self): self._loaded = False\n"
|
|
176
|
-
]
|
|
177
|
-
},
|
|
178
|
-
{
|
|
179
|
-
"cell_type": "code",
|
|
180
|
-
"execution_count": null,
|
|
181
|
-
"id": "940136d6",
|
|
182
|
-
"metadata": {},
|
|
183
|
-
"outputs": [],
|
|
184
|
-
"source": [
|
|
185
|
-
"#| export\n",
|
|
186
|
-
"@patch\n",
|
|
187
|
-
"def _load(self:BPLMagic):\n",
|
|
188
|
-
" if self._loaded: return\n",
|
|
189
|
-
" js = files('basedpl')\n",
|
|
190
|
-
" layout = (files('basedpl')/'layout.json').read_text()\n",
|
|
191
|
-
" display(Javascript(f\"{(js/'lb.js').read_text()}({json.dumps(symbols)}, {(js/'input.js').read_text()}, {layout}).page(window.monaco)\"))\n",
|
|
192
|
-
" display(HTML(f\"<style>{(js/'fonts.css').read_text()}</style>\"))\n",
|
|
193
|
-
" self._loaded = True"
|
|
173
|
+
" \"IPython BPL magics that evaluate in the workspace `basedpl.bpl`.\""
|
|
194
174
|
]
|
|
195
175
|
},
|
|
196
176
|
{
|
|
@@ -204,7 +184,8 @@
|
|
|
204
184
|
"@patch\n",
|
|
205
185
|
"def bpl(self:BPLMagic, line, cell=None):\n",
|
|
206
186
|
" \"Evaluate a line as a native value or display a cell as a BPL session.\"\n",
|
|
207
|
-
"
|
|
187
|
+
" display(Javascript(r'''if (window.loadBplInput) window.loadBplInput();\n",
|
|
188
|
+
"else import('https://cdn.jsdelivr.net/npm/basedpl/browser/bpl-editor.js').then(m => m.install());'''))\n",
|
|
208
189
|
" code = line if cell is None else cell.rstrip()\n",
|
|
209
190
|
" show = not (cell is not None and code.endswith(';'))\n",
|
|
210
191
|
" if not show: code = code[:-1]\n",
|
|
@@ -1352,10 +1333,11 @@
|
|
|
1352
1333
|
"source": [
|
|
1353
1334
|
"#| hide\n",
|
|
1354
1335
|
"with capture_output() as cap: magic.bpl('', 'quiet←9 ⋄ ⎕←quiet;')\n",
|
|
1355
|
-
"test_eq(len(cap.outputs),
|
|
1336
|
+
"test_eq(len(cap.outputs), 1)\n",
|
|
1337
|
+
"assert 'application/javascript' in cap.outputs[0].data\n",
|
|
1356
1338
|
"test_eq(magic.bpl('quiet').py, 9)\n",
|
|
1357
1339
|
"with capture_output() as cap: magic.bpl('', 'quiet ⋄ quiet+1')\n",
|
|
1358
|
-
"assert '9' in cap.outputs[
|
|
1340
|
+
"assert '9' in cap.outputs[-2].data['text/html'] and '10' in cap.outputs[-1].data['text/html']"
|
|
1359
1341
|
]
|
|
1360
1342
|
},
|
|
1361
1343
|
{
|
|
@@ -1435,10 +1417,10 @@
|
|
|
1435
1417
|
"outputs": [],
|
|
1436
1418
|
"source": [
|
|
1437
1419
|
"with capture_output() as cap: magic.bpl(']help double')\n",
|
|
1438
|
-
"assert 'Double the argument' in cap.outputs[
|
|
1420
|
+
"assert 'Double the argument' in cap.outputs[-1].data['text/markdown']\n",
|
|
1439
1421
|
"with capture_output() as cap: magic.bpl('', ']help double -source')\n",
|
|
1440
|
-
"assert '⎕←\"called\"' in cap.outputs[
|
|
1441
|
-
"test_eq(len(cap.outputs),
|
|
1422
|
+
"assert '⎕←\"called\"' in cap.outputs[-1].data['text/markdown']\n",
|
|
1423
|
+
"test_eq(len(cap.outputs), 2)"
|
|
1442
1424
|
]
|
|
1443
1425
|
},
|
|
1444
1426
|
{
|
|
@@ -1499,7 +1481,7 @@
|
|
|
1499
1481
|
"outputs": [],
|
|
1500
1482
|
"source": [
|
|
1501
1483
|
"with capture_output() as cap: test_fail(lambda: magic.bpl('', '⎕←42 ⋄ 1÷\"a\"'), contains='DOMAIN ERROR')\n",
|
|
1502
|
-
"assert '42' in cap.outputs[
|
|
1484
|
+
"assert '42' in cap.outputs[-1].data['text/html']\n",
|
|
1503
1485
|
"test_fail(lambda: magic.bpl('', '{⍵+1'), contains='SYNTAX ERROR')\n",
|
|
1504
1486
|
"test_eq(magic.bpl('quiet').py, 9)"
|
|
1505
1487
|
]
|
|
@@ -23,7 +23,8 @@ const css = getComputedStyle(document.documentElement), color = cls => {
|
|
|
23
23
|
const value = css.getPropertyValue(`--quarto-hl-${cls}-color`).trim();
|
|
24
24
|
return value === 'inherit' ? color('kw') : value;
|
|
25
25
|
};
|
|
26
|
-
const
|
|
26
|
+
const bplEditor = await import(new URL('browser/bpl-editor.js', pkg).href);
|
|
27
|
+
const {grammar} = bplEditor;
|
|
27
28
|
const classes = [['comment', 'co'], ['string.quoted.double', 'st'], ['string.quoted.single', 'ch'], ['constant.numeric', 'dv'],
|
|
28
29
|
['support.function', 'fu'], ['keyword.operator.monadic', 'op'],
|
|
29
30
|
['keyword.operator.dyadic', 'ex'], ['variable.parameter', 'va'], ['keyword.control', 'kw']];
|
|
@@ -103,11 +104,8 @@ export function display(out, data) {
|
|
|
103
104
|
}
|
|
104
105
|
|
|
105
106
|
let bar;
|
|
106
|
-
// The
|
|
107
|
-
|
|
108
|
-
const [lb, input, layout] = await Promise.all([script('lb.js'), script('input.js'), text('layout.json')]);
|
|
109
|
-
lb(symbols, input, JSON.parse(layout)).page(monaco);
|
|
110
|
-
}
|
|
107
|
+
// The same standalone input component used by notebooks and other hosts.
|
|
108
|
+
function addBar() { return bplEditor.install(); }
|
|
111
109
|
|
|
112
110
|
// Runs BPL in a worker, which holds one session. `run(code)` runs code, and `on` gets each message about it: `output`, then `reply` with
|
|
113
111
|
// the error or `null`. `eval(code)` returns a promise of the code's value, which rejects with the BPL error. `on` also gets `panic` and
|
|
@@ -121,7 +119,7 @@ export function interpreter(on) {
|
|
|
121
119
|
worker = new Worker(new URL(`worker.js?pkg=${encodeURIComponent(pkg)}`, import.meta.url), { type: 'module' });
|
|
122
120
|
worker.onmessage = ({ data }) => {
|
|
123
121
|
if (data.type === 'ready') {
|
|
124
|
-
bar ??= addBar(
|
|
122
|
+
bar ??= addBar();
|
|
125
123
|
ready = true;
|
|
126
124
|
for (const message of waiting) worker.postMessage(message);
|
|
127
125
|
return;
|
|
@@ -9,6 +9,7 @@ Press **▶ Run**, or Ctrl-Enter (Cmd-Enter on a Mac), to run the code. Type a b
|
|
|
9
9
|
The interpreter runs in your browser. It is the latest release of the npm package [`basedpl`](https://www.npmjs.com/package/basedpl). Names you create are persistent between runs. **⏹ Stop** ends the session and starts a new one.
|
|
10
10
|
|
|
11
11
|
```{=html}
|
|
12
|
+
<div id="bpl-toolbar"></div>
|
|
12
13
|
<div id="playground">
|
|
13
14
|
<div id="history"></div>
|
|
14
15
|
<div class="playground-editor">
|
|
@@ -50,7 +50,7 @@ Expansion applies only to typed REPL input, outside strings and comments. Pasted
|
|
|
50
50
|
|
|
51
51
|
### Other editors
|
|
52
52
|
|
|
53
|
-
The shared table is `python/basedpl/layout.json`, shipped in the Python package and embedded in the Rust REPL. `option` gives what each Alt key types: a glyph, or a dead-key state that the next key completes. Each state in `states` lists its keys, and the terminator that Space or an unlisted key types. Follow-up matching ignores Alt. Repeating the prefix key types its terminator and ends the sequence. Keys are US characters after Shift. `alt_aliases` maps actual Alt characters such as `£` to text for the REPL and notebook keyboard. Native macOS layouts ignore these aliases. `basedpl.editors.write()` builds the regional macOS layout bundles in `python/basedpl/assets/macos` from the same file and the native maps in `keyboards.json`.
|
|
53
|
+
The shared table is `python/basedpl/browser/layout.json`, shipped in the Python package and embedded in the Rust REPL. `option` gives what each Alt key types: a glyph, or a dead-key state that the next key completes. Each state in `states` lists its keys, and the terminator that Space or an unlisted key types. Follow-up matching ignores Alt. Repeating the prefix key types its terminator and ends the sequence. Keys are US characters after Shift. `alt_aliases` maps actual Alt characters such as `£` to text for the REPL and notebook keyboard. Native macOS layouts ignore these aliases. `basedpl.editors.write()` builds the regional macOS layout bundles in `python/basedpl/assets/macos` from the same file and the native maps in `keyboards.json`.
|
|
54
54
|
|
|
55
55
|
```python
|
|
56
56
|
import json
|
|
@@ -742,18 +742,20 @@
|
|
|
742
742
|
"id": "34b9099d",
|
|
743
743
|
"metadata": {},
|
|
744
744
|
"source": [
|
|
745
|
-
"
|
|
745
|
+
"Load the symbol bar and font without the BPL interpreter:\n",
|
|
746
746
|
"\n",
|
|
747
|
-
"```
|
|
748
|
-
"
|
|
749
|
-
"
|
|
750
|
-
"
|
|
751
|
-
"
|
|
752
|
-
"await init();\n",
|
|
753
|
-
"(0, eval)(lb)(JSON.parse(symbols()), (0, eval)(input), JSON.parse(layout));\n",
|
|
747
|
+
"```html\n",
|
|
748
|
+
"<script type=\"module\">\n",
|
|
749
|
+
"import {install} from 'https://cdn.jsdelivr.net/npm/basedpl/browser/bpl-editor.js';\n",
|
|
750
|
+
"install();\n",
|
|
751
|
+
"</script>\n",
|
|
754
752
|
"```\n",
|
|
755
753
|
"\n",
|
|
756
|
-
"
|
|
754
|
+
"Solveit, the playground and the gallery provide a normal-flow `#bpl-toolbar` slot. Other pages get the same component as a fixed top overlay without padding or height adjustment. The arrow button collapses or expands the row and remembers the choice for this origin. Collapsing keeps keyboard entry active.\n",
|
|
755
|
+
"\n",
|
|
756
|
+
"Click a glyph to insert it into the last editable BPL input, or type a backtick followed by a glyph's name. The controller recognizes BPL Monaco models, `%%bpl`/`%%apl` bodies, CodeMirror and marked textareas. It reads `window.monaco` when input occurs, so it does not need the editor to be ready when the script loads. `window.bplInput.dispose()` removes the bar and input listeners when a host page closes.\n",
|
|
757
|
+
"\n",
|
|
758
|
+
"`bpl.tmLanguage.json` is available separately for Shiki and other TextMate readers. `browser/bpl-editor.js` exports `grammar`, `configuration`, `editorOptions`, `installFont()` and `install()`. Importing it alone does not mount a bar; repeated `install()` calls reuse the connected controller."
|
|
757
759
|
]
|
|
758
760
|
},
|
|
759
761
|
{
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
[build-system]
|
|
2
|
-
requires = ["maturin>=1.13,<2.0", "fastws-cli>=0.0.
|
|
2
|
+
requires = ["maturin>=1.13,<2.0", "fastws-cli>=0.0.32"]
|
|
3
3
|
build-backend = "fastws.build_backend"
|
|
4
4
|
|
|
5
5
|
[project]
|
|
@@ -19,7 +19,7 @@ classifiers = [
|
|
|
19
19
|
]
|
|
20
20
|
|
|
21
21
|
[project.optional-dependencies]
|
|
22
|
-
dev = ["fastship>=0.0.11", "fastws-cli>=0.0.
|
|
22
|
+
dev = ["fastship>=0.0.11", "fastws-cli>=0.0.32", "maturin>=1.13,<2.0", "pytest", "pytest-timeout", "numpy", "pandas", "ipython>=9.17.1", "nbdev>=3.3.24", "conkernelclient>=0.0.23", "pillow", "rustymath>=0.1.49"]
|
|
23
23
|
|
|
24
24
|
[project.scripts]
|
|
25
25
|
basedpl-install = "basedpl.install:main"
|
|
@@ -48,6 +48,7 @@ cache-keys = [{ file = "pyproject.toml" }, { file = "Cargo.toml" }, { file = "cl
|
|
|
48
48
|
|
|
49
49
|
[tool.fastws]
|
|
50
50
|
native-binaries = true
|
|
51
|
+
post-develop-module = "basedpl.editors"
|
|
51
52
|
|
|
52
53
|
[tool.fastship]
|
|
53
54
|
branch = "main"
|
|
@@ -182,8 +182,9 @@ class Array(_Operators):
|
|
|
182
182
|
if names is not None: self.names = names
|
|
183
183
|
self._classify()
|
|
184
184
|
def _classify(self):
|
|
185
|
-
"
|
|
186
|
-
|
|
185
|
+
"Classify built-in array wrappers without changing user-defined subclasses."
|
|
186
|
+
if type(self) in (Array, FunctionArray):
|
|
187
|
+
self.__class__ = FunctionArray if self._inner.holds_functions else Array
|
|
187
188
|
@property
|
|
188
189
|
def shape(self): return tuple(self._inner.shape)
|
|
189
190
|
@property
|
|
@@ -32,8 +32,6 @@ d = { 'settings': { 'branch': 'main',
|
|
|
32
32
|
'basedpl.notebooks.AplOut.__repr__': ('magics.html#aplout.__repr__', 'basedpl/notebooks.py'),
|
|
33
33
|
'basedpl.notebooks.AplOut._repr_html_': ('magics.html#aplout._repr_html_', 'basedpl/notebooks.py'),
|
|
34
34
|
'basedpl.notebooks.BPLMagic': ('magics.html#bplmagic', 'basedpl/notebooks.py'),
|
|
35
|
-
'basedpl.notebooks.BPLMagic.__init__': ('magics.html#bplmagic.__init__', 'basedpl/notebooks.py'),
|
|
36
|
-
'basedpl.notebooks.BPLMagic._load': ('magics.html#bplmagic._load', 'basedpl/notebooks.py'),
|
|
37
35
|
'basedpl.notebooks.BPLMagic.bpl': ('magics.html#bplmagic.bpl', 'basedpl/notebooks.py'),
|
|
38
36
|
'basedpl.notebooks.BPLMagic.complete': ('magics.html#bplmagic.complete', 'basedpl/notebooks.py'),
|
|
39
37
|
'basedpl.notebooks.create_ipython_config': ('magics.html#create_ipython_config', 'basedpl/notebooks.py'),
|
|
@@ -922,19 +922,18 @@ def _cargo_test(root, *args):
|
|
|
922
922
|
def _steps(out, node):
|
|
923
923
|
"The steps of `prerelease`. Its browser package goes in `out/'wasm'`. `node` is the Node binary that the editor tests run under (`_node`)."
|
|
924
924
|
B, R, wasm = _ROOT, _RUSTYMATH, str(out/'wasm')
|
|
925
|
-
dev, rdev
|
|
925
|
+
dev, rdev = 'basedpl: cargo develop', 'rustymath: cargo develop'
|
|
926
926
|
return [
|
|
927
927
|
_Step(dev, ['cargo', 'develop'], B, timeout=1200),
|
|
928
928
|
_Step(rdev, ['cargo', 'develop'], R, timeout=1200),
|
|
929
|
-
_Step(gen, [sys.executable, '-m', 'basedpl.editors'], B, (dev,), timeout=600),
|
|
930
929
|
*(_Step(f'{r.name}: checked tests', _cargo_test(r, '--profile', 'checked', '--target-dir', str(r/'target'/'prerelease')), r, timeout=3600) for r in (B, R)),
|
|
931
|
-
_Step('target builds', ['bpl-tests', 'target_builds', wasm], B),
|
|
932
|
-
_Step('basedpl: pytest', ['pytest', '-q'], B, (
|
|
930
|
+
_Step('target builds', ['bpl-tests', 'target_builds', wasm], B, (dev,)),
|
|
931
|
+
_Step('basedpl: pytest', ['pytest', '-q'], B, (dev,), timeout=1200),
|
|
933
932
|
_Step('rustymath: pytest', ['pytest', '-q', '--ignore', 'tests/test_speed.py'], R, (rdev,), timeout=1200),
|
|
934
|
-
*(_Step(f'basedpl: {t} test', [node, f'tests/{t}.mjs'], B, (
|
|
933
|
+
*(_Step(f'basedpl: {t} test', [node, f'tests/{t}.mjs'], B, (dev,), timeout=300) for t in ('input', 'highlighting')),
|
|
935
934
|
_Step('basedpl: browser tests', ['bpl-tests', 'wasm_test', wasm], B, ('target builds',), timeout=900),
|
|
936
935
|
_Step('basedpl: BPL notebooks', ['bpl-nb', '--save'], B, (dev,)),
|
|
937
|
-
_Step('basedpl: nbdev', ['nbdev-prepare'], B, (
|
|
936
|
+
_Step('basedpl: nbdev', ['nbdev-prepare'], B, (dev, 'basedpl: BPL notebooks')),
|
|
938
937
|
_Step('rustymath: nbdev', ['nbdev-prepare'], R, (rdev,)),
|
|
939
938
|
_Step('basedpl: cargo test', _cargo_test(B), B, (dev,), dict(BASEDPL_COSTS='1'), 3600, True),
|
|
940
939
|
_Step('rustymath: cargo test', _cargo_test(R), R, (rdev,), dict(RUSTYMATH_COSTS='1'), 3600, True),
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import {grammar, symbols} from './language.js';
|
|
2
|
+
import input from './input.js';
|
|
3
|
+
import languageBar from './lb.js';
|
|
4
|
+
import layout from './layout.json' with {type: 'json'};
|
|
5
|
+
|
|
6
|
+
export {grammar};
|
|
7
|
+
export const configuration = {
|
|
8
|
+
comments: {lineComment: '⍝'}, brackets: [['(', ')'], ['[', ']'], ['{', '}']],
|
|
9
|
+
autoClosingPairs: [['(', ')'], ['[', ']'], ['{', '}'], ['"', '"'], ["'", "'"]].map(([open, close]) => ({open, close, notIn: ['string', 'comment']})),
|
|
10
|
+
surroundingPairs: [['(', ')'], ['[', ']'], ['{', '}'], ['"', '"'], ["'", "'"]].map(([open, close]) => ({open, close})),
|
|
11
|
+
};
|
|
12
|
+
export const editorOptions = {fontFamily: 'SAX2B, monospace', unicodeHighlight: {ambiguousCharacters: false}};
|
|
13
|
+
const font = new URL('./SAX2B.woff2', import.meta.url);
|
|
14
|
+
const mount = languageBar(symbols, input, layout, editorOptions);
|
|
15
|
+
|
|
16
|
+
export function installFont(doc = document) {
|
|
17
|
+
if (doc.getElementById('bpl-font')) return;
|
|
18
|
+
const style = doc.createElement('style');
|
|
19
|
+
style.id = 'bpl-font';
|
|
20
|
+
style.textContent = `@font-face{font-family:SAX2B;src:url("${font}") format("woff2")}`;
|
|
21
|
+
doc.head.append(style);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function install() {
|
|
25
|
+
if (window.bplInput?.element.isConnected) { window.bplInput.fonts(); return window.bplInput; }
|
|
26
|
+
window.bplInput?.dispose();
|
|
27
|
+
installFont();
|
|
28
|
+
const container = document.getElementById('bpl-toolbar');
|
|
29
|
+
window.bplInput = mount(container || document.body);
|
|
30
|
+
if (!container) window.bplInput.element.style.cssText = 'position:fixed;top:0;left:0;right:0;z-index:2147483647';
|
|
31
|
+
return window.bplInput;
|
|
32
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(
|
|
1
|
+
export default (symbols, layout) => {
|
|
2
2
|
const comments = new Set(symbols.filter(s => s.kind === 'comment').flatMap(s => [...s.glyph, ...s.hanzi.join('')]));
|
|
3
3
|
// US physical keys, before macOS Option or another layout transforms event.key.
|
|
4
4
|
const punctuation = {Backquote: '`~', Minus: '-_', Equal: '=+', BracketLeft: '[{', BracketRight: ']}',
|
|
@@ -107,4 +107,4 @@
|
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
return {matches, inCode, bplStart, entry, press, reset};
|
|
110
|
-
}
|
|
110
|
+
};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
// Generated by basedpl.editors.browser.
|
|
2
|
+
export const grammar = {"name": "bpl", "displayName": "BPL", "scopeName": "source.bpl", "fileTypes": ["bpl"], "patterns": [{"begin": "[⍝]", "beginCaptures": {"0": {"name": "comment.line.bpl"}}, "end": "$", "contentName": "comment.line.bpl", "patterns": [], "applyEndPatternLast": true}, {"begin": "\"", "beginCaptures": {"0": {"name": "string.quoted.double.bpl"}}, "end": "\"|$", "contentName": "string.quoted.double.bpl", "patterns": [{"match": "\"\"", "name": "string.quoted.double.bpl"}], "applyEndPatternLast": true, "endCaptures": {"0": {"name": "string.quoted.double.bpl"}}}, {"match": "'.?'", "name": "string.quoted.single.bpl"}, {"match": "(?:_\\d+|_\\S|_|[^\\s\\p{Cc}0-9←⎕•⍺⍵⍶⍹∇⍢⍝⋄⁝\\?¯∞⍬\\+\\-×÷⌈⌊\\|\\*⍟○π√!∧∨⊼⊽\\~=≠<≤>≥⍳↦:⍴≢≡,⍪⊂⊃⊆∊∪∩⍋⍒↑↓⌽⊖⍉⊤⊥⍎⍕⌷⌹\\#↕⍭⨸⌻⍸⍷⊢⊣¿¨ᵇ⍨↣⍤∘⍠⍥↢\\.⊗⌸⍣⇄⊘@∂⍚⌺/⌿\\\\⍀⁰¹²³⁴⁵⁶⁷⁸⁹⁻ᵀᵘₓ₀₁₂₃₄₅₆₇₈₉₋ₓ₁ₓ₂ₓ₄ₓ₈ₓₕₛₚ\\(\\)\\[\\]\\{\\}'\";\\$_ₑⱼᵣ])+", "name": "variable.other.bpl"}, {"match": "[•][A-Za-z_∆⍙][A-Za-z0-9_∆⍙]*", "name": "support.function.bpl"}, {"match": "(?:[¯]?[∞]|[¯]?(\\d+([.]\\d+)?|[.]\\d+)([eEₑ][¯]?\\d+)?([jJⱼ][¯]?(\\d+([.]\\d+)?|[.]\\d+)([eEₑ][¯]?\\d+)?|[rᵣ][¯]?\\d+)?)(?:ₓ₁|ₓ₂|ₓ₄|ₓ₈|ₓ|ₕ|ₛ|ₚ)?|[ₑⱼᵣ]", "name": "constant.numeric.bpl"}, {"match": "[⍬](?:ₓ₁|ₓ₂|ₓ₄|ₓ₈|ₓ|ₕ|ₛ|ₚ)?", "name": "constant.numeric.bpl"}, {"match": "\\$[tfn]", "name": "constant.numeric.bpl"}, {"match": "\\$[ad]", "name": "string.quoted.double.bpl"}, {"begin": "[\\])](?=(?:ₓ₁|ₓ₂|ₓ₄|ₓ₈|ₓ|ₕ|ₛ|ₚ))", "beginCaptures": {"0": {"name": "source.bpl"}}, "end": "(?:ₓ₁|ₓ₂|ₓ₄|ₓ₈|ₓ|ₕ|ₛ|ₚ)|$", "contentName": "constant.numeric.bpl", "patterns": [], "applyEndPatternLast": true, "endCaptures": {"0": {"name": "constant.numeric.bpl"}}}, {"match": "[\\+\\-×÷⌈⌊\\|\\*⍟○π√!∧∨⊼⊽\\~=≠<≤>≥⍳↦:⍴≢≡,⍪⊂⊃⊆∊∪∩⍋⍒↑↓⌽⊖⍉⊤⊥⍎⍕⌷⌹\\#↕⍭⨸⌻⍸⍷⊢⊣¿]", "name": "support.function.bpl"}, {"match": "(?:ₓ₁|ₓ₂|ₓ₄|ₓ₈|ₓ|ₕ|ₛ|ₚ)", "name": "keyword.operator.monadic.bpl"}, {"match": "[¨ᵇ⍨⊗⌸⇄∂/⌿\\\\⍀⁰¹²³⁴⁵⁶⁷⁸⁹⁻ᵀᵘₓ]", "name": "keyword.operator.monadic.bpl"}, {"match": "[↣⍤∘⍠⍥↢\\.⍣⊘@⍚⌺]", "name": "keyword.operator.dyadic.bpl"}, {"match": "[⍺⍵⍶⍹∇⍢]", "name": "variable.parameter.bpl"}, {"match": "[←⎕⋄⁝\\?₀₁₂₃₄₅₆₇₈₉₋]", "name": "keyword.control.bpl"}]};
|
|
3
|
+
export const symbols = [{"glyph": "←", "name": "left-arrow", "kind": "syntax", "monad": "assign", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["是", "是"], "shortcut": " h"}, {"glyph": "⎕", "name": "quad", "kind": "syntax", "monad": "io", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["出入", "出入"], "shortcut": " q"}, {"glyph": "•", "name": "bullet", "kind": "system", "monad": "system", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["系", "系"], "shortcut": " y"}, {"glyph": "⍺", "name": "alpha", "kind": "argument", "monad": "left-argument", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["甲", "甲"], "shortcut": " a"}, {"glyph": "⍵", "name": "omega", "kind": "argument", "monad": "right-argument", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["乙", "乙"], "shortcut": " w"}, {"glyph": "⍶", "name": "alpha-underbar", "kind": "argument", "monad": "left-operand", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["丙", "丙"], "shortcut": " - a"}, {"glyph": "⍹", "name": "omega-underbar", "kind": "argument", "monad": "right-operand", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["丁", "丁"], "shortcut": " - w"}, {"glyph": "∇", "name": "del", "kind": "argument", "monad": "recursion", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["递", "遞"], "shortcut": " g"}, {"glyph": "⍢", "name": "del-diaeresis", "kind": "argument", "monad": "operator-recursion", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["循", "循"], "shortcut": " 1 g"}, {"glyph": "⍝", "name": "lamp", "kind": "comment", "monad": "comment", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["注", "注"], "shortcut": " o c"}, {"glyph": "⋄", "name": "diamond", "kind": "syntax", "monad": "separator", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["句", "句"], "shortcut": " `"}, {"glyph": "⁝", "name": "tricolon", "kind": "syntax", "monad": "token-separator", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["隔", "隔"], "shortcut": " :"}, {"glyph": "?", "name": "question", "kind": "syntax", "monad": "predicate", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["若", "若"], "shortcut": ""}, {"glyph": "¯", "name": "overbar", "kind": "literal", "monad": "negative", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["负", "負"], "shortcut": " -"}, {"glyph": "∞", "name": "infinity", "kind": "literal", "monad": "", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["永", "永"], "shortcut": " 8"}, {"glyph": "⍬", "name": "zilde", "kind": "literal", "monad": "empty", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["空", "空"], "shortcut": " )"}, {"glyph": "+", "name": "plus", "kind": "function", "monad": "conjugate", "dyad": "add", "monad_rank": "0", "dyad_ranks": "0 0", "hanzi": ["加", "加"], "shortcut": ""}, {"glyph": "-", "name": "minus", "kind": "function", "monad": "negate", "dyad": "subtract", "monad_rank": "0", "dyad_ranks": "0 0", "hanzi": ["减", "減"], "shortcut": ""}, {"glyph": "×", "name": "times", "kind": "function", "monad": "sign", "dyad": "multiply", "monad_rank": "0", "dyad_ranks": "0 0", "hanzi": ["乘号", "乘號"], "shortcut": " m"}, {"glyph": "÷", "name": "obelus", "kind": "function", "monad": "reciprocal", "dyad": "divide", "monad_rank": "0", "dyad_ranks": "0 0", "hanzi": ["除", "除"], "shortcut": " u"}, {"glyph": "⌈", "name": "upstile", "kind": "function", "monad": "ceiling", "dyad": "maximum", "monad_rank": "0", "dyad_ranks": "0 0", "hanzi": ["上", "上"], "shortcut": " s"}, {"glyph": "⌊", "name": "downstile", "kind": "function", "monad": "floor", "dyad": "minimum", "monad_rank": "0", "dyad_ranks": "0 0", "hanzi": ["下", "下"], "shortcut": " d"}, {"glyph": "|", "name": "stile", "kind": "function", "monad": "magnitude", "dyad": "residue", "monad_rank": "0", "dyad_ranks": "0 0", "hanzi": ["绝余", "絕餘"], "shortcut": ""}, {"glyph": "*", "name": "star", "kind": "function", "monad": "exponential", "dyad": "exponent", "monad_rank": "0", "dyad_ranks": "0 0", "hanzi": ["幂", "冪"], "shortcut": ""}, {"glyph": "⍟", "name": "circle-star", "kind": "function", "monad": "natural-log", "dyad": "logarithm", "monad_rank": "0", "dyad_ranks": "0 0", "hanzi": ["对", "對"], "shortcut": " o 8"}, {"glyph": "○", "name": "circle", "kind": "function", "monad": "cis", "dyad": "circular", "monad_rank": "0", "dyad_ranks": "0 0", "hanzi": ["圆", "圓"], "shortcut": " o"}, {"glyph": "π", "name": "pi", "kind": "function", "monad": "pi-times", "dyad": "pi-ratio", "monad_rank": "0", "dyad_ranks": "0 0", "hanzi": ["周", "周"], "shortcut": " p"}, {"glyph": "√", "name": "radical", "kind": "function", "monad": "sqrt", "dyad": "root", "monad_rank": "0", "dyad_ranks": "0 0", "hanzi": ["根", "根"], "shortcut": " 3"}, {"glyph": "!", "name": "exclamation", "kind": "function", "monad": "factorial", "dyad": "binomial", "monad_rank": "0", "dyad_ranks": "0 0", "hanzi": ["阶拣", "階揀"], "shortcut": ""}, {"glyph": "∧", "name": "wedge", "kind": "function", "monad": "polar", "dyad": "and", "monad_rank": "0", "dyad_ranks": "0 0", "hanzi": ["极且", "極且"], "shortcut": " 0"}, {"glyph": "∨", "name": "vee", "kind": "function", "monad": "real-imag", "dyad": "or", "monad_rank": "0", "dyad_ranks": "0 0", "hanzi": ["析或", "析或"], "shortcut": " 9"}, {"glyph": "⊼", "name": "wedge-bar", "kind": "function", "monad": "square", "dyad": "nand", "monad_rank": "0", "dyad_ranks": "0 0", "hanzi": ["方否", "方否"], "shortcut": " - 0"}, {"glyph": "⊽", "name": "vee-bar", "kind": "function", "monad": "double", "dyad": "nor", "monad_rank": "0", "dyad_ranks": "0 0", "hanzi": ["双莫", "雙莫"], "shortcut": " - 9"}, {"glyph": "~", "name": "tilde", "kind": "function", "monad": "not", "dyad": "without", "monad_rank": "0", "dyad_ranks": "∞ ∞", "hanzi": ["非无", "非無"], "shortcut": ""}, {"glyph": "=", "name": "equals", "kind": "function", "monad": "classify", "dyad": "equal", "monad_rank": "∞", "dyad_ranks": "0 0", "hanzi": ["等", "等"], "shortcut": ""}, {"glyph": "≠", "name": "not-equals", "kind": "function", "monad": "unique-mask", "dyad": "not-equal", "monad_rank": "∞", "dyad_ranks": "0 0", "hanzi": ["别初", "別初"], "shortcut": " +"}, {"glyph": "<", "name": "less-than", "kind": "function", "monad": "sort-up", "dyad": "less", "monad_rank": "∞", "dyad_ranks": "0 0", "hanzi": ["小", "小"], "shortcut": ""}, {"glyph": "≤", "name": "less-than-or-equal", "kind": "function", "monad": "decrement", "dyad": "less-equal", "monad_rank": "0", "dyad_ranks": "0 0", "hanzi": ["限退", "限退"], "shortcut": " <"}, {"glyph": ">", "name": "greater-than", "kind": "function", "monad": "sort-down", "dyad": "greater", "monad_rank": "∞", "dyad_ranks": "0 0", "hanzi": ["大", "大"], "shortcut": ""}, {"glyph": "≥", "name": "greater-than-or-equal", "kind": "function", "monad": "increment", "dyad": "greater-equal", "monad_rank": "0", "dyad_ranks": "0 0", "hanzi": ["达进", "達進"], "shortcut": " >"}, {"glyph": "⍳", "name": "iota", "kind": "function", "monad": "indices", "dyad": "index-of", "monad_rank": "1", "dyad_ranks": "∞ ∞", "hanzi": ["位", "位"], "shortcut": " i"}, {"glyph": "↦", "name": "right-arrow-from-bar", "kind": "function", "monad": "range", "dyad": "to", "monad_rank": "0", "dyad_ranks": "0 0", "hanzi": ["至", "至"], "shortcut": " l"}, {"glyph": ":", "name": "colon", "kind": "function", "monad": "unkey", "dyad": "keyed", "monad_rank": "∞", "dyad_ranks": "1 ∞", "hanzi": ["键卸", "鍵卸"], "shortcut": ""}, {"glyph": "⍴", "name": "rho", "kind": "function", "monad": "shape", "dyad": "reshape", "monad_rank": "∞", "dyad_ranks": "1 ∞", "hanzi": ["形", "形"], "shortcut": " r"}, {"glyph": "≢", "name": "equal-underbar-slash", "kind": "function", "monad": "tally", "dyad": "not-match", "monad_rank": "∞", "dyad_ranks": "∞ ∞", "hanzi": ["数异", "數異"], "shortcut": " ?"}, {"glyph": "≡", "name": "equal-underbar", "kind": "function", "monad": "depth", "dyad": "match", "monad_rank": "∞", "dyad_ranks": "∞ ∞", "hanzi": ["同深", "同深"], "shortcut": " ="}, {"glyph": ",", "name": "comma", "kind": "function", "monad": "ravel", "dyad": "catenate", "monad_rank": "∞", "dyad_ranks": "∞ ∞", "hanzi": ["连", "連"], "shortcut": ""}, {"glyph": "⍪", "name": "comma-bar", "kind": "function", "monad": "table", "dyad": "catenate-first", "monad_rank": "∞", "dyad_ranks": "∞ ∞", "hanzi": ["接矩", "接矩"], "shortcut": " - ,"}, {"glyph": "⊂", "name": "left-shoe", "kind": "function", "monad": "enclose", "dyad": "partitioned-enclose", "monad_rank": "∞", "dyad_ranks": "1 ∞", "hanzi": ["包", "包"], "shortcut": " z"}, {"glyph": "⊃", "name": "right-shoe", "kind": "function", "monad": "mix", "dyad": "pick", "monad_rank": "0", "dyad_ranks": "1 ∞", "hanzi": ["选合", "選合"], "shortcut": " x"}, {"glyph": "⊆", "name": "left-shoe-underbar", "kind": "function", "monad": "nest", "dyad": "partition", "monad_rank": "∞", "dyad_ranks": "1 ∞", "hanzi": ["巢段", "巢段"], "shortcut": " - z"}, {"glyph": "∊", "name": "epsilon", "kind": "function", "monad": "enlist", "dyad": "member", "monad_rank": "∞", "dyad_ranks": "∞ ∞", "hanzi": ["属展", "屬展"], "shortcut": " e"}, {"glyph": "∪", "name": "down-shoe", "kind": "function", "monad": "unique", "dyad": "union", "monad_rank": "∞", "dyad_ranks": "∞ ∞", "hanzi": ["并独", "併獨"], "shortcut": " v"}, {"glyph": "∩", "name": "up-shoe", "kind": "function", "monad": "duplicates", "dyad": "intersection", "monad_rank": "∞", "dyad_ranks": "∞ ∞", "hanzi": ["交重", "交重"], "shortcut": " c"}, {"glyph": "⍋", "name": "delta-stile", "kind": "function", "monad": "grade-up", "dyad": "grade-up-by", "monad_rank": "∞", "dyad_ranks": "∞ ∞", "hanzi": ["升", "升"], "shortcut": " \\ 7"}, {"glyph": "⍒", "name": "del-stile", "kind": "function", "monad": "grade-down", "dyad": "grade-down-by", "monad_rank": "∞", "dyad_ranks": "∞ ∞", "hanzi": ["降", "降"], "shortcut": " \\ g"}, {"glyph": "↑", "name": "up-arrow", "kind": "function", "monad": "first", "dyad": "take", "monad_rank": "∞", "dyad_ranks": "1 ∞", "hanzi": ["取", "取"], "shortcut": " k"}, {"glyph": "↓", "name": "down-arrow", "kind": "function", "monad": "split", "dyad": "drop", "monad_rank": "1", "dyad_ranks": "1 ∞", "hanzi": ["去拆", "去拆"], "shortcut": " j"}, {"glyph": "⌽", "name": "circle-stile", "kind": "function", "monad": "reverse", "dyad": "rotate", "monad_rank": "1", "dyad_ranks": "0 1", "hanzi": ["转", "轉"], "shortcut": " 2"}, {"glyph": "⊖", "name": "circle-bar", "kind": "function", "monad": "reverse-first", "dyad": "rotate-first", "monad_rank": "∞", "dyad_ranks": "∞ ∞", "hanzi": ["纵", "縱"], "shortcut": " o -"}, {"glyph": "⍉", "name": "circle-backslash", "kind": "function", "monad": "transpose", "dyad": "reorder-axes", "monad_rank": "∞", "dyad_ranks": "1 ∞", "hanzi": ["翻", "翻"], "shortcut": " o \\"}, {"glyph": "⊤", "name": "down-tack", "kind": "function", "monad": "binary-encode", "dyad": "encode", "monad_rank": "∞", "dyad_ranks": "1 0", "hanzi": ["编", "編"], "shortcut": " n"}, {"glyph": "⊥", "name": "up-tack", "kind": "function", "monad": "binary-decode", "dyad": "decode", "monad_rank": "1", "dyad_ranks": "1 1", "hanzi": ["译", "譯"], "shortcut": " b"}, {"glyph": "⍎", "name": "hydrant", "kind": "function", "monad": "execute", "dyad": "execute-in", "monad_rank": "1", "dyad_ranks": "∞ ∞", "hanzi": ["行", "行"], "shortcut": " o b"}, {"glyph": "⍕", "name": "thorn", "kind": "function", "monad": "format", "dyad": "format-spec", "monad_rank": "∞", "dyad_ranks": "1 ∞", "hanzi": ["文", "文"], "shortcut": " o n"}, {"glyph": "⌷", "name": "squad", "kind": "function", "monad": "materialise", "dyad": "index", "monad_rank": "∞", "dyad_ranks": "1 ∞", "hanzi": ["索", "索"], "shortcut": " q \\"}, {"glyph": "⌹", "name": "domino", "kind": "function", "monad": "matrix-inverse", "dyad": "matrix-divide", "monad_rank": "2", "dyad_ranks": "∞ 2", "hanzi": ["解逆", "解逆"], "shortcut": " q u"}, {"glyph": "#", "name": "hash", "kind": "function", "monad": "runs", "dyad": "replicate", "monad_rank": "∞", "dyad_ranks": "1 ∞", "hanzi": ["复", "複"], "shortcut": ""}, {"glyph": "↕", "name": "up-down-arrow", "kind": "function", "monad": "pairs", "dyad": "windows", "monad_rank": "∞", "dyad_ranks": "∞ ∞", "hanzi": ["窗", "窗"], "shortcut": " K"}, {"glyph": "⍭", "name": "stile-tilde", "kind": "function", "monad": "prime", "dyad": "prime-mode", "monad_rank": "0", "dyad_ranks": "0 0", "hanzi": ["素", "素"], "shortcut": " \\"}, {"glyph": "⨸", "name": "circle-divide", "kind": "function", "monad": "factors", "dyad": "factor-spec", "monad_rank": "0", "dyad_ranks": "0 0", "hanzi": ["因", "因"], "shortcut": " o u"}, {"glyph": "⌻", "name": "quad-jot", "kind": "function", "monad": "roots", "dyad": "polyval", "monad_rank": "1", "dyad_ranks": "1 0", "hanzi": ["零值", "零值"], "shortcut": " q t"}, {"glyph": "⍸", "name": "iota-underbar", "kind": "function", "monad": "where", "dyad": "interval-index", "monad_rank": "∞", "dyad_ranks": "∞ ∞", "hanzi": ["处间", "處間"], "shortcut": " - i"}, {"glyph": "⍷", "name": "epsilon-underbar", "kind": "function", "monad": "groups", "dyad": "find", "monad_rank": "∞", "dyad_ranks": "∞ ∞", "hanzi": ["寻群", "尋群"], "shortcut": " - e"}, {"glyph": "⊢", "name": "right-tack", "kind": "function", "monad": "same", "dyad": "right", "monad_rank": "∞", "dyad_ranks": "∞ ∞", "hanzi": ["右", "右"], "shortcut": " '"}, {"glyph": "⊣", "name": "left-tack", "kind": "function", "monad": "same-left", "dyad": "left", "monad_rank": "∞", "dyad_ranks": "∞ ∞", "hanzi": ["左", "左"], "shortcut": " ;"}, {"glyph": "¿", "name": "inverted-question", "kind": "function", "monad": "roll", "dyad": "deal", "monad_rank": "0", "dyad_ranks": "0 0", "hanzi": ["掷抽", "擲抽"], "shortcut": " /"}, {"glyph": "¨", "name": "diaeresis", "kind": "monadic-operator", "monad": "each", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["遍", "遍"], "shortcut": " 1"}, {"glyph": "ᵇ", "name": "superscript-b", "kind": "monadic-operator", "monad": "bitwise", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["按", "按"], "shortcut": " 6 b"}, {"glyph": "⍨", "name": "tilde-diaeresis", "kind": "monadic-operator", "monad": "self", "dyad": "commute", "monad_rank": "", "dyad_ranks": "", "hanzi": ["己换", "己換"], "shortcut": " 1 `"}, {"glyph": "↣", "name": "right-tail-arrow", "kind": "dyadic-operator", "monad": "before", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["先", "先"], "shortcut": " ."}, {"glyph": "⍤", "name": "jot-diaeresis", "kind": "dyadic-operator", "monad": "rank", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["秩", "秩"], "shortcut": " 1 t"}, {"glyph": "∘", "name": "jot", "kind": "dyadic-operator", "monad": "atop", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["承", "承"], "shortcut": " t"}, {"glyph": "⍠", "name": "quad-colon", "kind": "dyadic-operator", "monad": "axis", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["轴", "軸"], "shortcut": " q ;"}, {"glyph": "⍥", "name": "circle-diaeresis", "kind": "dyadic-operator", "monad": "over", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["经", "經"], "shortcut": " 1 o"}, {"glyph": "↢", "name": "left-tail-arrow", "kind": "dyadic-operator", "monad": "after", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["后", "後"], "shortcut": " ,"}, {"glyph": ".", "name": "dot", "kind": "dyadic-operator", "monad": "determinant", "dyad": "inner-product", "monad_rank": "", "dyad_ranks": "", "hanzi": ["内", "內"], "shortcut": ""}, {"glyph": "⊗", "name": "circle-times", "kind": "monadic-operator", "monad": "outer-product", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["表", "表"], "shortcut": " o m"}, {"glyph": "⌸", "name": "quad-equal", "kind": "monadic-operator", "monad": "key", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["组", "組"], "shortcut": " q ="}, {"glyph": "⍣", "name": "star-diaeresis", "kind": "dyadic-operator", "monad": "power", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["次止", "次止"], "shortcut": " 1 8"}, {"glyph": "⇄", "name": "right-left-arrows", "kind": "monadic-operator", "monad": "optimize", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["优", "優"], "shortcut": " 4"}, {"glyph": "⊘", "name": "circle-slash", "kind": "dyadic-operator", "monad": "valences", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["兼", "兼"], "shortcut": " o /"}, {"glyph": "@", "name": "at", "kind": "dyadic-operator", "monad": "under", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["于", "於"], "shortcut": ""}, {"glyph": "∂", "name": "partial", "kind": "monadic-operator", "monad": "derivative", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["导梯", "導梯"], "shortcut": " f"}, {"glyph": "⍚", "name": "diamond-underbar", "kind": "dyadic-operator", "monad": "agenda", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["择", "擇"], "shortcut": " - `"}, {"glyph": "⌺", "name": "quad-diamond", "kind": "dyadic-operator", "monad": "stencil", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["邻", "鄰"], "shortcut": " q `"}, {"glyph": "/", "name": "slash", "kind": "monadic-operator", "monad": "reduce", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["总", "總"], "shortcut": ""}, {"glyph": "⌿", "name": "slash-bar", "kind": "monadic-operator", "monad": "reduce-first", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["汇", "匯"], "shortcut": " - /"}, {"glyph": "\\", "name": "backslash", "kind": "monadic-operator", "monad": "scan", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["累", "累"], "shortcut": ""}, {"glyph": "⍀", "name": "backslash-bar", "kind": "monadic-operator", "monad": "scan-first", "dyad": "", "monad_rank": "", "dyad_ranks": "", "hanzi": ["续", "續"], "shortcut": " - \\"}];
|