basedpl 0.1.40__tar.gz → 0.1.41__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.40 → basedpl-0.1.41}/.github/workflows/ci.yml +15 -5
- basedpl-0.1.41/.github/workflows/speed.yml +36 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/Cargo.lock +7 -7
- {basedpl-0.1.40 → basedpl-0.1.41}/Cargo.toml +2 -2
- {basedpl-0.1.40 → basedpl-0.1.41}/PKG-INFO +1 -1
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/ceiling.qmd +2 -1
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/floor.qmd +2 -1
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/numbers.qmd +2 -2
- {basedpl-0.1.40 → basedpl-0.1.41}/src/number.rs +4 -5
- {basedpl-0.1.40 → basedpl-0.1.41}/src/pervasive.rs +10 -10
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/speed.txt +72 -72
- basedpl-0.1.40/.github/workflows/speed.yml +0 -23
- {basedpl-0.1.40 → basedpl-0.1.41}/.cargo/config.toml +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/.gitattributes +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/.github/workflows/docs.yml +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/.gitignore +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/CONTRIBUTING.md +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/LICENSE +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/README.md +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/_config.yml +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/_layouts/default.html +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/build.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/jetbrains/BPL.tmbundle/Syntaxes/bpl.tmLanguage.json +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/jetbrains/BPL.tmbundle/info.plist +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/jetbrains/BPL.xml +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/jetbrains/README.md +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-de.bundle/Contents/Info.plist +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-de.bundle/Contents/Resources/BasedPL-de.icns +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-de.bundle/Contents/Resources/BasedPL-de.keylayout +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-de.bundle/Contents/Resources/en.lproj/InfoPlist.strings +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-de.bundle/Contents/version.plist +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-de.txt +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-es.bundle/Contents/Info.plist +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-es.bundle/Contents/Resources/BasedPL-es.icns +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-es.bundle/Contents/Resources/BasedPL-es.keylayout +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-es.bundle/Contents/Resources/en.lproj/InfoPlist.strings +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-es.bundle/Contents/version.plist +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-es.txt +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-fr.bundle/Contents/Info.plist +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-fr.bundle/Contents/Resources/BasedPL-fr.icns +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-fr.bundle/Contents/Resources/BasedPL-fr.keylayout +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-fr.bundle/Contents/Resources/en.lproj/InfoPlist.strings +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-fr.bundle/Contents/version.plist +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-fr.txt +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-uk.bundle/Contents/Info.plist +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-uk.bundle/Contents/Resources/BasedPL-uk.icns +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-uk.bundle/Contents/Resources/BasedPL-uk.keylayout +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-uk.bundle/Contents/Resources/en.lproj/InfoPlist.strings +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-uk.bundle/Contents/version.plist +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-uk.txt +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-us.bundle/Contents/Info.plist +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-us.bundle/Contents/Resources/BasedPL-us.icns +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-us.bundle/Contents/Resources/BasedPL-us.keylayout +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-us.bundle/Contents/Resources/en.lproj/InfoPlist.strings +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-us.bundle/Contents/version.plist +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-us.txt +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/vim/ftdetect/bpl.vim +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/vim/syntax/bpl.vim +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/windows/README.md +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/windows/build.ps1 +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/windows/install.ps1 +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/windows/keyboard.c +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/windows/keyboard.def +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/windows/keyboard.rc +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/editors/windows/layout.h +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/index_files/figure-commonmark/cell-17-output-1.svg +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/index_files/figure-commonmark/cell-18-output-1.svg +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/index_files/figure-html/cell-17-output-1.svg +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/index_files/figure-html/cell-18-output-1.svg +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/lib/LICENSE-april +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/lib/README.md +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/lib/array.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/lib/dyalog.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/lib/graph.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/lib/numeric.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/lib/power.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/lib/regex.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/lib/string.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/lib/tree.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/.gitignore +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/_quarto.yml +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/arrays.ipynb +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/assignment.ipynb +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/bpl.xml +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/bqn.xml +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/bracket-types.ipynb +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/cli.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/comparison.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/data.ipynb +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/dfns.ipynb +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/distributions.ipynb +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/driver.js +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/dyalog.ipynb +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/dyalog.xml +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/evaluation.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/fonts/LICENSE-SAX2 +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/fonts/README.md +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/fonts/SAX2B.ttf +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/fonts/SAX2B.woff2 +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/fonts.css +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/gallery/attractor.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/gallery/boids.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/gallery/dragon.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/gallery/flow.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/gallery/mandelbrot.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/gallery/mandelbrot32.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/gallery/orbits.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/gallery/phyllotaxis.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/gallery/prefs.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/gallery/reaction.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/gallery.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/getting-started.ipynb +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/_metadata.yml +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/add.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/after.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/agenda.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/alpha-underbar.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/alpha.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/and.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/assign.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/atop.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/axis.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/backslash-bar.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/backslash.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/before.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/braces.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/brackets.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/bullet.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/circle.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/colon.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/comma.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/comment.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/commute.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/dash.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/decode.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/del-diaeresis.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/del.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/derivative.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/diamond.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/div.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/domino.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/dot.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/drop.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/each.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/enclose.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/encode.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/equal.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/error-guard.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/execute.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/factor.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/factorial.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/find.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/format.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/grade-down.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/grade-up.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/greater-or-equal.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/greater.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/hash.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/infinity.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/intersection.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/inverse-pair.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/inverted-question.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/iota.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/key.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/left.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/less-or-equal.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/less.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/log.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/match.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/member.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/mix.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/mul.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/nand.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/nest.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/nor.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/not-equal.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/omega-underbar.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/omega.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/or.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/outer-product.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/over.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/overbar.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/parentheses.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/pi.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/polynomial.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/power.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/prime.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/quad.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/question.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/quote.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/range.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/rank.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/reverse-first.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/reverse.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/rho.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/right.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/root.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/slash-bar.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/slash.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/squad.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/star.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/stencil.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/stile.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/table.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/take.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/tally.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/tilde.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/transpose.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/under.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/union.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/valences.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/where.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/windows.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs/zilde.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/glyphs.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/index.ipynb +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/introspection.ipynb +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/keyboard.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/keyed.ipynb +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/llms.txt +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/magics.ipynb +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/modules.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/nbdev.yml +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/notebooks.ipynb +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/overview.ipynb +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/papers/aplwiki-arrays.md +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/papers/brickman-depth-1-scalars.md +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/papers/mercer-based-system.md +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/playground/bpl.js +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/playground/gallery.js +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/playground/monaco-worker.js +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/playground/page.js +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/playground/worker.js +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/playground.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/plot.ipynb +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/principles.ipynb +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/processes.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/puppy.jpg +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/python.ipynb +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/regex.ipynb +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/repl.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/scripts.ipynb +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/sidebar.yml +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/strings.ipynb +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/styles.css +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/syntax.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/_metadata.yml +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/c.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/canvas.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/constants.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/copy.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/csv.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/date.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/decompose.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/deflate.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/delay.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/distribution.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/element.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/ex.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/fetch.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/float.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/hash.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/host.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/image.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/js.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/json.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/literal.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/load.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/metadata.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/mime.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/mkdir.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/nc.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/nget.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/nl.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/normalize.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/nput.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/path.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/plot.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/prefs.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/r.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/rand.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/readdir.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/remove.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/rename.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/signal.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/src.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/storage.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/svg.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/time.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/ucs.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/uuid.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/vfi.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system/xml.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/system-functions.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/terms.qmd +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/web.ipynb +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/nbs/xml.ipynb +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/provenance/README.md +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/provenance/aplcart.jsonl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/provenance/april.jsonl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/provenance/bqn.jsonl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/provenance/core.jsonl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/provenance/dyalog.jsonl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/provenance/ngn.jsonl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/py/Cargo.toml +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/py/build.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/py/src/lib.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/pyproject.toml +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/python/basedpl/__init__.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/python/basedpl/_modidx.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/python/basedpl/bpl.tmLanguage.json +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/python/basedpl/bpltests.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/python/basedpl/dyalog.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/python/basedpl/editors.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/python/basedpl/font.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/python/basedpl/fonts.css +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/python/basedpl/functions.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/python/basedpl/input.js +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/python/basedpl/ipython.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/python/basedpl/keyboards.json +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/python/basedpl/keyboards.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/python/basedpl/layout.json +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/python/basedpl/lb.js +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/python/basedpl/notebook_runner.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/python/basedpl/notebooks.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/python/basedpl/printing.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/python/basedpl/reference.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/python/basedpl/syntax.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/python/basedpl/windows_keyboard.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/python/basedpl/worker.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/rustfmt.toml +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/scripts/install-macos.sh +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/scripts/prep.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/agreement.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/array/storage.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/array/text.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/array.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/canvas.js +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/canvas.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/csv.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/data.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/date.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/display.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/distribution.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/element.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/error.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/eval/assign.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/eval/binder.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/eval/dissect.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/eval/operators.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/eval/session.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/eval.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/execution.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/files.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/host.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/host_web.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/image.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/inspection.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/js.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/json.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/keyed.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/lib.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/number_theory.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/plot.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/polynomial.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/primitive/indexing.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/primitive/numeric.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/primitive/search.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/primitive/structural.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/primitive.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/protocol.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/reference.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/regex.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/search.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/selection.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/symbols.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/syntax.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/system.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/timing.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/src/xml.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/conftest.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/core.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/highlighting.mjs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/input.mjs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/reference/LICENSE-aplcart +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/reference/LICENSE-april +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/reference/LICENSE-bqn +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/reference/LICENSE-bqncrate +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/reference/LICENSE-dyalog +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/reference/LICENSE-ngn +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/reference/README.md +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/reference/aplcart.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/reference/april.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/reference/bqn.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/reference/core.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/reference/distributions.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/reference/dyalog.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/reference/graphics.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/reference/lib.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/reference/ngn.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/reference/regex.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/reference/support/april.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/reference/support/avl.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/reference/support/redblack.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/reference/support/sbst.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/reference/support/splay.bpl +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/reference.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/scaling.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/speed.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/test_api.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/test_basic.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/test_bpltests.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/test_glyphs.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/test_graphics.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/test_ipython.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/test_kernel.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/test_keylayout.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/test_notebooks.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/test_reference.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/test_repl.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/test_windows_keyboard.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/test_worker.py +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/units.rs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/wasm-pkg.mjs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/wasm-speed.mjs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/wasm.mjs +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/tests/windows_keyboard.c +0 -0
- {basedpl-0.1.40 → basedpl-0.1.41}/wheel/data/share/jupyter/kernels/bpl/kernel.json +0 -0
|
@@ -8,15 +8,20 @@ on:
|
|
|
8
8
|
|
|
9
9
|
jobs:
|
|
10
10
|
test:
|
|
11
|
-
runs
|
|
11
|
+
# A `v*` tag runs this job and `wasm` on GitHub's runner, like the release jobs, without the speed tests. The speed budgets come from Ubicloud's runner.
|
|
12
|
+
runs-on: ${{ startsWith(github.ref, 'refs/tags/v') && 'ubuntu-latest' || 'ubicloud-standard-4' }}
|
|
12
13
|
steps:
|
|
13
14
|
- uses: actions/checkout@v7
|
|
14
15
|
- run: node tests/input.mjs
|
|
15
16
|
- uses: dtolnay/rust-toolchain@stable
|
|
16
17
|
# The repository has no `Cargo.lock`. Creating one first makes rust-cache's key change when a dependency publishes a new version.
|
|
17
18
|
- run: cargo generate-lockfile
|
|
19
|
+
# The `Speed` workflow restores this cache and the `wasm` job's, by their `shared-key`.
|
|
18
20
|
- uses: Swatinem/rust-cache@v2
|
|
19
|
-
|
|
21
|
+
with:
|
|
22
|
+
shared-key: native
|
|
23
|
+
- run: grep -m1 'model name' /proc/cpuinfo
|
|
24
|
+
- run: cargo test -- ${{ startsWith(github.ref, 'refs/tags/v') && '--skip functions_cost_what_their_work_needs' || '' }}
|
|
20
25
|
- uses: actions/setup-python@v7
|
|
21
26
|
with:
|
|
22
27
|
python-version: '3.12'
|
|
@@ -27,7 +32,7 @@ jobs:
|
|
|
27
32
|
- run: nbdev-test
|
|
28
33
|
|
|
29
34
|
wasm:
|
|
30
|
-
runs-on: ubuntu-latest
|
|
35
|
+
runs-on: ${{ startsWith(github.ref, 'refs/tags/v') && 'ubuntu-latest' || 'ubicloud-standard-4' }}
|
|
31
36
|
steps:
|
|
32
37
|
- uses: actions/checkout@v7
|
|
33
38
|
- uses: dtolnay/rust-toolchain@stable
|
|
@@ -35,11 +40,16 @@ jobs:
|
|
|
35
40
|
targets: wasm32-unknown-unknown
|
|
36
41
|
- run: cargo generate-lockfile
|
|
37
42
|
- uses: Swatinem/rust-cache@v2
|
|
43
|
+
with:
|
|
44
|
+
shared-key: wasm
|
|
38
45
|
- run: cargo wasm --strip
|
|
39
46
|
- run: node --test tests/wasm.mjs
|
|
40
|
-
- run:
|
|
47
|
+
- run: grep -m1 'model name' /proc/cpuinfo
|
|
48
|
+
- if: ${{ !startsWith(github.ref, 'refs/tags/v') }}
|
|
49
|
+
run: node --no-liftoff --test tests/wasm-speed.mjs
|
|
41
50
|
# The `npm` job publishes this package on a `v*` tag.
|
|
42
|
-
-
|
|
51
|
+
- if: startsWith(github.ref, 'refs/tags/v')
|
|
52
|
+
uses: actions/upload-artifact@v7
|
|
43
53
|
with:
|
|
44
54
|
name: wasm-pkg
|
|
45
55
|
path: wasm/pkg
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
name: Speed
|
|
2
|
+
|
|
3
|
+
on: workflow_dispatch
|
|
4
|
+
|
|
5
|
+
permissions:
|
|
6
|
+
contents: read
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
native:
|
|
10
|
+
runs-on: ubicloud-standard-4
|
|
11
|
+
steps:
|
|
12
|
+
- uses: actions/checkout@v7
|
|
13
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
14
|
+
- run: cargo generate-lockfile
|
|
15
|
+
# Only CI's `test` job saves this cache. This job builds only part of what `test` builds. GitHub never replaces a saved cache under the same key.
|
|
16
|
+
- uses: Swatinem/rust-cache@v2
|
|
17
|
+
with:
|
|
18
|
+
shared-key: native
|
|
19
|
+
save-if: false
|
|
20
|
+
- run: grep -m1 'model name' /proc/cpuinfo
|
|
21
|
+
- run: BASEDPL_COSTS=1 cargo test --test speed -- --nocapture
|
|
22
|
+
|
|
23
|
+
wasm:
|
|
24
|
+
runs-on: ubicloud-standard-4
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@v7
|
|
27
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
28
|
+
with:
|
|
29
|
+
targets: wasm32-unknown-unknown
|
|
30
|
+
- run: cargo generate-lockfile
|
|
31
|
+
- uses: Swatinem/rust-cache@v2
|
|
32
|
+
with:
|
|
33
|
+
shared-key: wasm
|
|
34
|
+
- run: cargo wasm --strip
|
|
35
|
+
- run: grep -m1 'model name' /proc/cpuinfo
|
|
36
|
+
- run: BASEDPL_COSTS=1 node --no-liftoff tests/wasm-speed.mjs
|
|
@@ -87,7 +87,7 @@ checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5"
|
|
|
87
87
|
|
|
88
88
|
[[package]]
|
|
89
89
|
name = "basedpl"
|
|
90
|
-
version = "0.1.
|
|
90
|
+
version = "0.1.41"
|
|
91
91
|
dependencies = [
|
|
92
92
|
"base64 0.23.1",
|
|
93
93
|
"bytemuck",
|
|
@@ -133,7 +133,7 @@ dependencies = [
|
|
|
133
133
|
|
|
134
134
|
[[package]]
|
|
135
135
|
name = "basedpl-cli"
|
|
136
|
-
version = "0.1.
|
|
136
|
+
version = "0.1.41"
|
|
137
137
|
dependencies = [
|
|
138
138
|
"async-trait",
|
|
139
139
|
"basedpl",
|
|
@@ -146,7 +146,7 @@ dependencies = [
|
|
|
146
146
|
|
|
147
147
|
[[package]]
|
|
148
148
|
name = "basedpl-py"
|
|
149
|
-
version = "0.1.
|
|
149
|
+
version = "0.1.41"
|
|
150
150
|
dependencies = [
|
|
151
151
|
"basedpl",
|
|
152
152
|
"bytemuck",
|
|
@@ -161,7 +161,7 @@ dependencies = [
|
|
|
161
161
|
|
|
162
162
|
[[package]]
|
|
163
163
|
name = "basedpl-wasm"
|
|
164
|
-
version = "0.1.
|
|
164
|
+
version = "0.1.41"
|
|
165
165
|
dependencies = [
|
|
166
166
|
"basedpl",
|
|
167
167
|
"js-sys",
|
|
@@ -1782,9 +1782,9 @@ dependencies = [
|
|
|
1782
1782
|
|
|
1783
1783
|
[[package]]
|
|
1784
1784
|
name = "rustymath"
|
|
1785
|
-
version = "0.1.
|
|
1785
|
+
version = "0.1.9"
|
|
1786
1786
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1787
|
-
checksum = "
|
|
1787
|
+
checksum = "45551e624b74066f0c0bf66b9110899e3e0c69d6b8dea0e70bc11b677da52241"
|
|
1788
1788
|
dependencies = [
|
|
1789
1789
|
"faer",
|
|
1790
1790
|
"half",
|
|
@@ -2471,7 +2471,7 @@ checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc"
|
|
|
2471
2471
|
|
|
2472
2472
|
[[package]]
|
|
2473
2473
|
name = "xtask"
|
|
2474
|
-
version = "0.1.
|
|
2474
|
+
version = "0.1.41"
|
|
2475
2475
|
dependencies = [
|
|
2476
2476
|
"anyhow",
|
|
2477
2477
|
"serde_json",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
members = ["py"]
|
|
3
3
|
|
|
4
4
|
[workspace.package]
|
|
5
|
-
version = "0.1.
|
|
5
|
+
version = "0.1.41"
|
|
6
6
|
edition = "2021"
|
|
7
7
|
rust-version = "1.98"
|
|
8
8
|
license = "Apache-2.0"
|
|
@@ -51,7 +51,7 @@ num-complex = { version = ">=0.4.6, <1", features = ["bytemuck"] }
|
|
|
51
51
|
num-bigint = ">=0.4.6, <0.5"
|
|
52
52
|
num-traits = ">=0.2.19, <1"
|
|
53
53
|
half = { version = ">=2.7.1, <3", features = ["num-traits", "bytemuck"] }
|
|
54
|
-
rustymath = ">=0.1.
|
|
54
|
+
rustymath = ">=0.1.9, <1"
|
|
55
55
|
strength_reduce = ">=0.2.4, <1"
|
|
56
56
|
rand = ">=0.10.2, <1"
|
|
57
57
|
faer = { version = ">=0.24.4, <1", default-features = false, features = ["std", "linalg"] }
|
|
@@ -9,8 +9,9 @@ Keys: `Alt-s`. Ranks: `0` monadic, `0 0` dyadic
|
|
|
9
9
|
⌈3r2 ⍝ 2ₓ
|
|
10
10
|
```
|
|
11
11
|
|
|
12
|
-
`X⌈Y` takes the real maximum. Pervasive. Beside NaN it
|
|
12
|
+
`X⌈Y` takes the real maximum. Pervasive. Beside NaN it gives NaN, as NumPy's `maximum` does. Empty reduction identity: `¯∞`.
|
|
13
13
|
|
|
14
14
|
```bpl
|
|
15
15
|
3⌈1 5 ⍝ 3 5
|
|
16
|
+
3⌈1 $n 5 ⍝ 3 $n 5
|
|
16
17
|
```
|
|
@@ -15,8 +15,9 @@ Complex floor uses APL's Gaussian-integer rule.
|
|
|
15
15
|
⌊1.5j0.5 ⍝ 1j1
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
`X⌊Y` takes the real minimum. Pervasive. Beside NaN it
|
|
18
|
+
`X⌊Y` takes the real minimum. Pervasive. Beside NaN it gives NaN, as NumPy's `minimum` does. Empty reduction identity: `∞`.
|
|
19
19
|
|
|
20
20
|
```bpl
|
|
21
21
|
3⌊1 5 ⍝ 1 3
|
|
22
|
+
3⌊1 $n 5 ⍝ 1 $n 3
|
|
22
23
|
```
|
|
@@ -177,11 +177,11 @@ Joining infinities or NaN to exact integers keeps the integers exact. Exact inte
|
|
|
177
177
|
|
|
178
178
|
CSV and JSON imports give NaN for a missing number. An integer column with gaps then stays exact.
|
|
179
179
|
|
|
180
|
-
`⌊` and `⌈` return an exact argument unchanged beside an infinity
|
|
180
|
+
`⌊` and `⌈` return an exact argument unchanged beside an infinity. Beside NaN they give NaN:
|
|
181
181
|
|
|
182
182
|
```bpl
|
|
183
183
|
3ₓ⌊∞ ⍝ 3ₓ
|
|
184
|
-
3ₓ⌊$n ⍝
|
|
184
|
+
3ₓ⌊$n ⍝ $n
|
|
185
185
|
```
|
|
186
186
|
|
|
187
187
|
Arithmetic with an infinity gives floats.
|
|
@@ -754,14 +754,13 @@ impl Number {
|
|
|
754
754
|
|
|
755
755
|
fn minimum(&self, right: &Self, maximum: bool) -> Result<Self, &'static str> {
|
|
756
756
|
if let (Integer(x), Integer(y)) = (&self.0, &right.0) { return Ok(Self(Integer(if maximum { *x.max(y) } else { *x.min(y) }))); }
|
|
757
|
-
//
|
|
757
|
+
// NaN beside any number gives NaN, at the width the two compute at. An exact number stays exact beside an infinity, and beside
|
|
758
758
|
// another exact number.
|
|
759
|
-
|
|
760
|
-
if right.
|
|
761
|
-
if (self.is_exact() && right.is_exact()) || self.is_infinite() || right.is_infinite() {
|
|
759
|
+
let nan = self.is_nan() || right.is_nan();
|
|
760
|
+
if !nan && ((self.is_exact() && right.is_exact()) || self.is_infinite() || right.is_infinite()) {
|
|
762
761
|
return Ok((if maximum == self.order(right)?.is_lt() { right } else { self }).clone());
|
|
763
762
|
}
|
|
764
|
-
reals!(self, right => |x, y: F| Ok(Self::from_float(if maximum { x
|
|
763
|
+
reals!(self, right => |x, y: F| Ok(Self::from_float(if maximum { rustymath::reduce::maximum(x, y) } else { rustymath::reduce::minimum(x, y) })))
|
|
765
764
|
}
|
|
766
765
|
|
|
767
766
|
/// The result at the first of four levels that gives one for `self` and `right`: both 64-bit integers, both exact, both real, and
|
|
@@ -209,8 +209,8 @@ mod float_arithmetic {
|
|
|
209
209
|
Primitive::Arithmetic(Minus) => run.same(|x, y| Some(x - y)),
|
|
210
210
|
Primitive::Arithmetic(Times) => run.same(|x, y| Some(x * y)),
|
|
211
211
|
Primitive::Arithmetic(Divide) => run.same(|x, y| Some(x / y)),
|
|
212
|
-
Primitive::Math(Ceiling) => run.same(|x: F, y| Some(x
|
|
213
|
-
Primitive::Math(Floor) => run.same(|x: F, y| Some(x
|
|
212
|
+
Primitive::Math(Ceiling) => run.same(|x: F, y| Some(reduce::maximum(x, y))),
|
|
213
|
+
Primitive::Math(Floor) => run.same(|x: F, y| Some(reduce::minimum(x, y))),
|
|
214
214
|
Primitive::Math(Magnitude) => with_tolerance!(t, |t| run.same(move |x: F, y: F| Some(t.residue(x, y)))),
|
|
215
215
|
Primitive::Compare(op) => with_tolerance!(t, |t| compare(op, run, t)),
|
|
216
216
|
_ => return None,
|
|
@@ -991,7 +991,7 @@ impl<A: Element, X: Element, Y: Source<A>> Monad<A> for Map<'_, X, Y> {
|
|
|
991
991
|
}
|
|
992
992
|
|
|
993
993
|
/// A loop over integers where an argument holds a non-finite value, read as `extended` defines them. Beside such a value, arithmetic
|
|
994
|
-
/// gives `extended::arithmetic`. Comparisons
|
|
994
|
+
/// gives `extended::arithmetic`. Comparisons follow IEEE: NaN is unordered. `⌊` and `⌈` give NaN beside NaN, as they do on floats. Monadic
|
|
995
995
|
/// `+ ⌊ ⌈` keep every value, `×` keeps NaN, and `-` and `|` act on the float the value stands for. Other kernels give up there. `seen`
|
|
996
996
|
/// records whether any result is non-finite.
|
|
997
997
|
struct Nonfinite<'a, R> { run: R, p: Primitive, seen: &'a Cell<bool> }
|
|
@@ -1006,7 +1006,7 @@ impl<R: Dyad<i64>> Dyad<i64> for Nonfinite<'_, R> {
|
|
|
1006
1006
|
Primitive::Math(Math::Floor | Math::Ceiling) => self.run.same(move |x, y| {
|
|
1007
1007
|
note(
|
|
1008
1008
|
seen,
|
|
1009
|
-
if extended::is_nan(x) { Some(
|
|
1009
|
+
if extended::is_nan(x) { Some(x) } else if extended::is_nan(y) { Some(y) } else { f(x, y) },
|
|
1010
1010
|
)
|
|
1011
1011
|
}),
|
|
1012
1012
|
Primitive::Arithmetic(op) => self.run.same(move |x, y| note(seen, if special(x, y) { extended::arithmetic(op, x, y) } else { f(x, y) })),
|
|
@@ -1091,8 +1091,8 @@ pub(crate) fn fold(p: Primitive, right: &Value, axis: &Axis, shape: Vec<usize>,
|
|
|
1091
1091
|
}
|
|
1092
1092
|
}
|
|
1093
1093
|
|
|
1094
|
-
/// A reduction of floats of width `F`. `+/` and `×/` use algebraic operations, which may combine the items in any order.
|
|
1095
|
-
///
|
|
1094
|
+
/// A reduction of floats of width `F`. `+/` and `×/` use algebraic operations, which may combine the items in any order. Each lane of
|
|
1095
|
+
/// `⌈/` starts from ¯∞ and each lane of `⌊/` from ∞. A NaN item makes its lane's result NaN.
|
|
1096
1096
|
fn float_fold<F: Float + Native + Kernels + reduce::Fold<Sum = F>>(p: Primitive, data: &[F], axis: &Axis, shape: Vec<usize>, numeric: Numeric) -> Option<Value>
|
|
1097
1097
|
where
|
|
1098
1098
|
bool: Source<F>,
|
|
@@ -1102,8 +1102,8 @@ where
|
|
|
1102
1102
|
match p {
|
|
1103
1103
|
Primitive::Arithmetic(Plus) => F::build_narrowed(shape, lanes(data, axis, F::zero(), F::algebraic_add, |l| total(reduce::sum(l)))),
|
|
1104
1104
|
Primitive::Arithmetic(Times) => F::build_narrowed(shape, lanes(data, axis, F::one(), F::algebraic_mul, |l| total(reduce::prod(l)))),
|
|
1105
|
-
Primitive::Math(Ceiling) => F::build_narrowed(shape, lanes(data, axis, F::
|
|
1106
|
-
Primitive::Math(Floor) => F::build_narrowed(shape, lanes(data, axis, F::
|
|
1105
|
+
Primitive::Math(Ceiling) => F::build_narrowed(shape, lanes(data, axis, F::neg_infinity(), reduce::maximum, reduce::max)),
|
|
1106
|
+
Primitive::Math(Floor) => F::build_narrowed(shape, lanes(data, axis, F::infinity(), reduce::minimum, reduce::min)),
|
|
1107
1107
|
_ => F::dyad(p, Fold { data, axis, shape, numeric })?,
|
|
1108
1108
|
}
|
|
1109
1109
|
}
|
|
@@ -1305,8 +1305,8 @@ where
|
|
|
1305
1305
|
match p {
|
|
1306
1306
|
Primitive::Arithmetic(Arithmetic::Plus) => scan.sliced(|x, y| x + y, |l, s, o| { reduce::cumsum(l, s, o); }),
|
|
1307
1307
|
Primitive::Arithmetic(Arithmetic::Times) => scan.sliced(|x, y| x * y, |l, s, o| { reduce::cumprod(l, s, o); }),
|
|
1308
|
-
Primitive::Math(Math::Ceiling) => scan.sliced(
|
|
1309
|
-
Primitive::Math(Math::Floor) => scan.sliced(
|
|
1308
|
+
Primitive::Math(Math::Ceiling) => scan.sliced(reduce::maximum, reduce::cummax),
|
|
1309
|
+
Primitive::Math(Math::Floor) => scan.sliced(reduce::minimum, reduce::cummin),
|
|
1310
1310
|
_ => F::dyad(p, scan)?,
|
|
1311
1311
|
}
|
|
1312
1312
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# The cases that `tests/speed.rs` times in the native build and `tests/wasm-speed.mjs` times in the browser build. Each case line holds the code, its native budget and its wasm budget, separated by tabs. Each section starts with its name in brackets and the prefs its session starts with. Every session then runs the lines under `[setup]`.
|
|
2
2
|
# Budgets in `[copies]` and `[exact]` count copies of the same data. A budget in `[widths]` is the most that the time in that section's 32-bit session may be, as a fraction of the time in the `[exact]` session. Natively and in wasm, it is the worse of that fraction on a Mac and on CI's runner, plus 0.25.
|
|
3
|
-
# A wasm budget in copies is twice the most the case has cost on a Mac in the module that `cargo wasm` builds, and at least 0.5. `tests/speed.rs` gives the rule for native budgets in copies.
|
|
3
|
+
# A wasm budget in copies is twice the most the case has cost on a Mac and on CI's runner, in the module that `cargo wasm` builds, and at least 0.5. `tests/speed.rs` gives the same rule for native budgets in copies. CI's Ubicloud runner hasn't timed the cases yet, so the CI figures come from GitHub's runner, in `Speed` run 38184659294. A CI wasm job on the same code cost about 2.5 times that run's wasm figures, so each wasm figure counts 2.5 times. `⌈/v`, `⌈\v` and `v⌊w` changed after that run, and the Mac's costs stand in for CI's.
|
|
4
4
|
[setup]
|
|
5
5
|
side←256 ⋄ n←side×side ⋄ v←¿n⍴0 ⋄ w←¿n⍴0 ⋄ s←v-0.5 ⋄ m←[side side]⍴v
|
|
6
6
|
jv←¿n⍴1000ₓ ⋄ kv←¿n⍴1000000000000ₓ ⋄ b←0=¿n⍴3ₓ ⋄ i←¿n⍴⌊n
|
|
@@ -16,142 +16,142 @@ nd←•distribution "normal" ⋄ coeffs←0.5 ¯1.25 0.75 2 ¯0.125 0.0625 ¯1.
|
|
|
16
16
|
⌈/v 2.9 15
|
|
17
17
|
∧/b 0.6 3.4
|
|
18
18
|
+/m 2.5 5.7
|
|
19
|
-
+⌿m 3.4
|
|
19
|
+
+⌿m 3.4 5
|
|
20
20
|
# Reading one argument and writing each item once.
|
|
21
|
-
-v
|
|
21
|
+
-v 3 6
|
|
22
22
|
-jv 2.1 2.2
|
|
23
23
|
~b 0.5 1.1
|
|
24
24
|
∧\b 0.5 0.96
|
|
25
25
|
∨\b 0.5 1.1
|
|
26
|
-
⌽v
|
|
27
|
-
1⌽v 3.4
|
|
28
|
-
⊖m 3.6
|
|
29
|
-
1↓v 3.7 4.
|
|
30
|
-
(n÷2)↑v 2.2
|
|
26
|
+
⌽v 3 7.9
|
|
27
|
+
1⌽v 3.4 5.4
|
|
28
|
+
⊖m 3.8 6.9
|
|
29
|
+
1↓v 3.7 4.3
|
|
30
|
+
(n÷2)↑v 2.2 3.3
|
|
31
31
|
n⍴0 1.8 3.6
|
|
32
32
|
# Reading two arguments and writing each item once.
|
|
33
|
-
v+w 4.6
|
|
33
|
+
v+w 4.6 9.7
|
|
34
34
|
jv+jv 2.7 2.7
|
|
35
|
-
kv+kv 4.
|
|
36
|
-
v×2
|
|
37
|
-
jv×2 2.6
|
|
35
|
+
kv+kv 4.9 14
|
|
36
|
+
v×2 3.1 4.8
|
|
37
|
+
jv×2 2.6 5.1
|
|
38
38
|
jv=jv 2.0 2.3
|
|
39
|
-
b×jv 3.2
|
|
40
|
-
b×kv 4.7
|
|
39
|
+
b×jv 3.2 11
|
|
40
|
+
b×kv 4.7 13
|
|
41
41
|
v⌊w 4.6 14
|
|
42
42
|
b∧b 1.2 1.5
|
|
43
|
-
c=c 1.4
|
|
43
|
+
c=c 1.4 6.8
|
|
44
44
|
(⍳√n)×⊗⍳√n 4.0 4.7
|
|
45
45
|
# Compressing by a mask can't be vectorised, because each kept item's place depends on the items before it.
|
|
46
|
-
b#v
|
|
47
|
-
⍸b 6.1
|
|
46
|
+
b#v 6.7 14
|
|
47
|
+
⍸b 6.1 11
|
|
48
48
|
# A range with an approximate length converts each position from an integer to a float.
|
|
49
49
|
⍳n 2.1 5.9
|
|
50
50
|
# Comparing within tolerance takes a subtraction, the magnitudes, a scale and a comparison for each item.
|
|
51
51
|
⌊v 18.0 55
|
|
52
|
-
v<w 11.0
|
|
52
|
+
v<w 11.0 30
|
|
53
53
|
jv<500 7.0 2.5
|
|
54
54
|
# Writing twice as many items, or writing in a different order from reading.
|
|
55
|
-
v,w 4.6
|
|
56
|
-
⍉m 21.0
|
|
55
|
+
v,w 4.6 11
|
|
56
|
+
⍉m 21.0 29
|
|
57
57
|
# A small-table index takes one pass for the range of the items, then one pass to write each item's first position into the
|
|
58
58
|
# table. Each of these passes costs 1.4 to 2.5 copies, because a table read or write can't be vectorised.
|
|
59
|
-
≠jv
|
|
59
|
+
≠jv 9.6 21
|
|
60
60
|
# A search also looks each item of the other argument up in the table, and unique then compresses by the mask.
|
|
61
|
-
jv⍳jv
|
|
62
|
-
jv∊jv 19.0
|
|
63
|
-
c⍳c
|
|
61
|
+
jv⍳jv 20 37
|
|
62
|
+
jv∊jv 19.0 37
|
|
63
|
+
c⍳c 20 36
|
|
64
64
|
∪jv 15.0 29
|
|
65
65
|
∪c 17.0 28
|
|
66
66
|
# Key classifies the keys, counts and places each group's positions, then gathers each group's items.
|
|
67
|
-
{≢⍵}⌸b 73.0
|
|
67
|
+
{≢⍵}⌸b 73.0 140
|
|
68
68
|
# Each item waits for the result before it. In float scans by `+` and `⌈`, only one item in each group of four waits for the group
|
|
69
69
|
# before it.
|
|
70
|
-
+\v 5.3 6.
|
|
71
|
-
⌈\v 8.1
|
|
72
|
-
+\jv
|
|
73
|
-
+\b 7.4
|
|
74
|
-
≠\b
|
|
70
|
+
+\v 5.3 6.5
|
|
71
|
+
⌈\v 8.1 42
|
|
72
|
+
+\jv 14 27
|
|
73
|
+
+\b 7.4 18
|
|
74
|
+
≠\b 6.6 9.8
|
|
75
75
|
# Each item waits for a read from a random place.
|
|
76
|
-
[i]⌷v 16.0
|
|
76
|
+
[i]⌷v 16.0 29
|
|
77
77
|
# An approximate divisor reads the integers as floats. Each item then needs a float division and a floor within tolerance.
|
|
78
|
-
3|jv
|
|
78
|
+
3|jv 27 170
|
|
79
79
|
# rustymath's `exp` evaluates a polynomial of 10 terms for each item, and `ln` one of 7 terms and a division.
|
|
80
|
-
*s 23.0
|
|
81
|
-
⍟v
|
|
80
|
+
*s 23.0 57
|
|
81
|
+
⍟v 33 96
|
|
82
82
|
# rustymath's sine and cosine reduce each item by π in three fused multiply-adds, and evaluate a polynomial of 7 terms. Tangent
|
|
83
83
|
# reduces by π/2, evaluates a polynomial of 9 terms at half the angle, and divides once.
|
|
84
|
-
1○v
|
|
85
|
-
2○v
|
|
86
|
-
3○v 26.0
|
|
84
|
+
1○v 20 68
|
|
85
|
+
2○v 23 75
|
|
86
|
+
3○v 26.0 110
|
|
87
87
|
# The hyperbolic functions build on rustymath's `exp` and `expm1`, with a division. The inverse circle functions evaluate a
|
|
88
88
|
# polynomial of 10 or 12 terms after a reduction with a square root or a division.
|
|
89
|
-
5○v
|
|
90
|
-
6○v
|
|
91
|
-
7○v 31.0
|
|
92
|
-
1○⁻¹v 24.0
|
|
93
|
-
2○⁻¹v 65.0
|
|
94
|
-
3○⁻¹v 23.0
|
|
89
|
+
5○v 32 110
|
|
90
|
+
6○v 24 65
|
|
91
|
+
7○v 31.0 88
|
|
92
|
+
1○⁻¹v 24.0 71
|
|
93
|
+
2○⁻¹v 65.0 92
|
|
94
|
+
3○⁻¹v 23.0 93
|
|
95
95
|
# The inverse hyperbolic functions build on rustymath's `log1p`, after a square root or a division.
|
|
96
|
-
5○⁻¹v 48.0
|
|
97
|
-
4○v 13.0
|
|
96
|
+
5○⁻¹v 48.0 110
|
|
97
|
+
4○v 13.0 19
|
|
98
98
|
# An exponent of 2 squares each item, in a loop of its own. Another exponent calls rustymath's `pow` for each item, which at f64
|
|
99
99
|
# reads tables that NEON and wasm can't vectorize.
|
|
100
|
-
v*2 3.2 4.
|
|
100
|
+
v*2 3.2 4.9
|
|
101
101
|
v*w 130.0 210
|
|
102
102
|
# Bases 2 and 10 and degrees 2 and 3 have loops of their own.
|
|
103
|
-
2⍟v 33.0
|
|
104
|
-
10⍟v 34.0
|
|
105
|
-
3√v
|
|
103
|
+
2⍟v 33.0 77
|
|
104
|
+
10⍟v 34.0 98
|
|
105
|
+
3√v 28 98
|
|
106
106
|
# Exact integers read as floats for a function whose results are always approximate.
|
|
107
|
-
⍟jv 35
|
|
108
|
-
*jv 23
|
|
109
|
-
jv⍟2ₓ 140
|
|
110
|
-
√jv 7.5
|
|
107
|
+
⍟jv 35 96
|
|
108
|
+
*jv 23 69
|
|
109
|
+
jv⍟2ₓ 140 290
|
|
110
|
+
√jv 7.5 26
|
|
111
111
|
# `!` calls rustymath's `gamma`, which sums its Lanczos series in double words. A distribution's density, cdf and quantile each
|
|
112
112
|
# run over the array as one slice. The quantile refines Giles's approximation of erfcinv with Halley steps. `⌻` evaluates a
|
|
113
113
|
# polynomial of degree 7 by Horner's rule.
|
|
114
|
-
!v
|
|
115
|
-
nd.density v 70
|
|
116
|
-
nd.cdf v 62
|
|
117
|
-
nd.quantile v 690
|
|
114
|
+
!v 450 1400
|
|
115
|
+
nd.density v 70 120
|
|
116
|
+
nd.cdf v 62 140
|
|
117
|
+
nd.quantile v 690 1100
|
|
118
118
|
coeffs⌻v 12 34
|
|
119
119
|
# Each item goes into a hash table, and each item of the other argument is looked up in it. A tolerant search looks in two
|
|
120
120
|
# buckets for each item, where an exact search looks in one.
|
|
121
121
|
v⍳w 710.0 830
|
|
122
122
|
# A radix sort moves every item once for each byte that differs between the keys.
|
|
123
|
-
⍋v 280.0
|
|
124
|
-
⍋jv 110.0
|
|
123
|
+
⍋v 280.0 360
|
|
124
|
+
⍋jv 110.0 190
|
|
125
125
|
# Unique sorts the reals, then compares each with the next one.
|
|
126
|
-
∪v 320.0
|
|
126
|
+
∪v 320.0 540
|
|
127
127
|
[exact] •prefs ["tolerance":0]
|
|
128
128
|
# Plain IEEE comparisons and `floor`, with nothing to scale by a tolerance.
|
|
129
129
|
⌊v 5.0 15
|
|
130
|
-
v<w 3.
|
|
131
|
-
v=w 3.2
|
|
132
|
-
3|v 5
|
|
130
|
+
v<w 3.2 9.3
|
|
131
|
+
v=w 3.2 7.8
|
|
132
|
+
3|v 8.5 36
|
|
133
133
|
# Each real indexes its `order_key` in a hash map, as exact data does.
|
|
134
|
-
v⍳w 340.0
|
|
134
|
+
v⍳w 340.0 260
|
|
135
135
|
∪v 410.0 260
|
|
136
136
|
[widths] •prefs ["float":32]
|
|
137
137
|
# Half the bytes to read and write, and twice the lanes in each SIMD instruction.
|
|
138
138
|
-v 0.82 0.89
|
|
139
139
|
v+w 0.78 0.85
|
|
140
140
|
v×2 0.83 0.89
|
|
141
|
-
v<w 0.
|
|
141
|
+
v<w 0.83 0.88
|
|
142
142
|
0.5<v 0.87 0.87
|
|
143
|
-
√v 0.
|
|
143
|
+
√v 0.79 0.86
|
|
144
144
|
+⌿m 0.89 0.99
|
|
145
145
|
+/v 0.88 0.77
|
|
146
146
|
⌈/v 0.91 1.26
|
|
147
147
|
m+.×m 0.87 1.26
|
|
148
148
|
# `⌊` reads half the bytes and writes 32-bit integers in place of 64-bit ones.
|
|
149
|
-
⌊v 0.89 1.
|
|
149
|
+
⌊v 0.89 1.05
|
|
150
150
|
# An LU decomposition in 32 bits.
|
|
151
151
|
⌹m 0.99 1.23
|
|
152
152
|
# rustymath's `exp` and `ln` run shorter polynomials at f32, with twice the lanes in each SIMD instruction.
|
|
153
|
-
*s 0.
|
|
154
|
-
⍟v 0.
|
|
153
|
+
*s 0.66 0.61
|
|
154
|
+
⍟v 0.69 0.64
|
|
155
155
|
# rustymath's sine and cosine reduce in f32 with fused multiply-adds, and run a polynomial of 4 terms in place of 7.
|
|
156
156
|
1○v 0.71 1.01
|
|
157
157
|
2○v 0.74 0.98
|
|
@@ -159,10 +159,10 @@ m+.×m 0.87 1.26
|
|
|
159
159
|
7○v 0.7 0.61
|
|
160
160
|
1○⁻¹v 0.64 0.56
|
|
161
161
|
3○⁻¹v 0.69 0.57
|
|
162
|
-
v*2 0.82
|
|
162
|
+
v*2 0.82 1.08
|
|
163
163
|
v*w 0.8 0.93
|
|
164
164
|
# Grade sorts keys and positions of half the bytes.
|
|
165
|
-
⍋v 0.
|
|
165
|
+
⍋v 0.98 0.92
|
|
166
166
|
# A hash lookup costs about the same at either width. These budgets catch a 32-bit search that costs much more than a 64-bit one.
|
|
167
|
-
v⍳w 1.
|
|
167
|
+
v⍳w 1.18 1.23
|
|
168
168
|
∪v 1.2 1.33
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
name: Speed
|
|
2
|
-
|
|
3
|
-
on: workflow_dispatch
|
|
4
|
-
|
|
5
|
-
permissions:
|
|
6
|
-
contents: read
|
|
7
|
-
|
|
8
|
-
jobs:
|
|
9
|
-
costs:
|
|
10
|
-
runs-on: ubuntu-latest
|
|
11
|
-
steps:
|
|
12
|
-
- uses: actions/checkout@v7
|
|
13
|
-
- uses: dtolnay/rust-toolchain@stable
|
|
14
|
-
with:
|
|
15
|
-
targets: wasm32-unknown-unknown
|
|
16
|
-
- run: cargo generate-lockfile
|
|
17
|
-
- uses: Swatinem/rust-cache@v2
|
|
18
|
-
- run: BASEDPL_COSTS=1 cargo test --test speed -- --nocapture
|
|
19
|
-
# The wasm costs print even when a native case goes over budget.
|
|
20
|
-
- if: ${{ !cancelled() }}
|
|
21
|
-
run: cargo wasm --strip
|
|
22
|
-
- if: ${{ !cancelled() }}
|
|
23
|
-
run: BASEDPL_COSTS=1 node --no-liftoff tests/wasm-speed.mjs
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{basedpl-0.1.40 → basedpl-0.1.41}/editors/jetbrains/BPL.tmbundle/Syntaxes/bpl.tmLanguage.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-de.bundle/Contents/Resources/BasedPL-de.icns
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-es.bundle/Contents/Resources/BasedPL-es.icns
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-fr.bundle/Contents/Resources/BasedPL-fr.icns
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{basedpl-0.1.40 → basedpl-0.1.41}/editors/macos/BasedPL-uk.bundle/Contents/Resources/BasedPL-uk.icns
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|