Skip to main content

bAsedPL

bAsedPL (“Based-array APL”) is an APL-derived array language, borrowing ideas from J and BQN, with an emphasis on simple, consistent notation. It is implemented in Rust, with a native executable, Jupyter kernel and Python API.

For APL users, the main choices are:

  • Based arrays, as in BQN: numbers, characters and functions are atoms; enclosure always adds a layer.
  • Leading-axis broadcasting, including unit-axis expansion, plus string keys and names on axes.
  • Exact integers and rationals alongside approximate real and complex numbers.
  • Dfns, trains and operators, with additions such as Under, iteration histories, windows and function arrays.

Indices start at 1; approximate comparisons use tolerance 1E¯14. See the glyph reference for Dyalog differences and the language rules for the array model.

Install and try it

pip install basedpl
bapl

At the prompt, define a mean and apply it:

avg←+/÷≢
avg 2 4 9
5

Use bapl -e 'avg←+/÷≢ ⋄ avg 2 4 9' for a shell command. The command-line guide covers source files and pipes.

Interactive use

In the REPL, type a backtick followed by a glyph name: `iota becomes ⍳ when you press Tab or type a non-letter. Abbreviations and Alt-key shortcuts are available. ]help + shows help; ]box on -style=max -trains=tree -fns=on enables boxed arrays and function trees. See REPL and Keyboard.

In Jupyter, select the installed bAsedPL kernel. Cells share definitions and support completion, Shift-Tab help and interruption. You can also use %%apl cells in a Python notebook. See Using bAsedPL notebooks.

New to APL?

APL is a language built around operations on whole arrays and notation for combining functions. Here is a taste of that style in bAsedPL.

Spaces form a vector. Arithmetic applies to every element:

10+1 2 3
11 12 13

Operators modify or combine functions. Reduce (/) turns addition into summation; ⍳10 generates 1…10:

+/⍳10
55

Functions can also be combined without naming their arguments. In avg←+/÷≢, sum (+/) divided by tally (≢) defines the mean:

avg 1 2 3 4
2.5

To see how these ideas express an algorithm, start from “a prime has exactly two positive divisors”. Form all remainders (|⌝⍨), count the zeros down each column (+⌿0=), and find the positions (⍸) whose count is two:

⍸2=+⌿0=|⌝⍨⍳50
2ₓ 3ₓ 5ₓ 7ₓ 11ₓ 13ₓ 17ₓ 19ₓ 23ₓ 29ₓ 31ₓ 37ₓ 41ₓ 43ₓ 47ₓ

Getting started builds this expression step by step, displaying the divisibility matrix along the way.

What’s distinctive?

Numbers

Bare numbers are approximate. Use x for exact integers and r for exact fractions:

1r3+1r6
1r2

Complex numbers use j between real and imaginary parts. Functions such as square root extend into the complex domain:

√¯4
0j2

See numbers for conversion and mixed arithmetic.

Array literals and broadcasting

Write matrix rows directly in an array literal. Leading-axis agreement lets a vector supply one offset per row:

m←[1 2 3 ⋄ 4 5 6]
m+10 20
11 12 13
24 25 26

See array notation and broadcasting.

Keys and named axes

Axes can have names, and positions along them can have string keys. Describe the axes once, then select by key or reduce by axis name:

axes←("city":"NY" "LA" ⋄ "month":"Jan" "Feb" "Mar")
sales←axes:[10 20 30 ⋄ 40 50 60]
"LA" "Feb"⌷sales
+/⍤["month"]sales
50

("NY":60 ⋄ "LA":150)

Keys and names travel with axes through operations such as transpose. Arithmetic aligns matching names and keys. See Axis keys.

Function operators

Enclose an iteration count to keep the history, including the initial value. Here, double four times:

2∘×⍣[4]1
1 2 4 8 16

Under (⌾) transforms the argument, applies a function, then reverses the transformation. Scale by ten, floor, and scale back to round down to tenths:

⌊⌾(10∘×)⊢1.25 2.78
1.2 2.7

Explore iteration and inverses, Under, windows and function selection.

Mathematical tools

Primes and factorisation are built in:

⨸360x
2ₓ 2ₓ 2ₓ 3ₓ 3ₓ 5ₓ

Polynomials support coefficients, roots and evaluation. Polynomial functions can be differentiated: for f(x) = 1 + 2x + 3x², f′(2) = 14.

f←1x 2x 3x∘⊛ ⋄ f∂2x
14ₓ

Probability distributions provide sampling, density, CDF and quantiles. Two fair coin tosses give these probabilities for 0, 1 and 2 heads:

coin←•binomial 2 0.5
coin.density 0 1 2
0.25 0.5 0.25

Matrix division handles linear systems and least squares.

Data and text

JSON objects become keyed arrays, with dot access to their fields:

order←•json "{""price"":10.5,""qty"":2}"
order.price×order.qty
21

CSV headers likewise name column vectors. Files, CSV and JSON covers reading, transforming and writing data. Regex supplies matching, captures and replacement through Rust’s regex engine.

Drawing

•plot draws charts from arrays. Keys label the axes and name the lines. See Plots.

("legend":"end") •plot sales

Build SVG from element functions and keyed attributes. Notebooks display the picture directly. The same element trees serialize to XML. See XML and SVG.

circle←•element "circle"
text←•element "text"
c←("cx":50 ⋄ "cy":40 ⋄ "r":25 ⋄ "fill":"orange") circle ""
t←("x":50 ⋄ "y":85 ⋄ "text-anchor":"middle") text "Hello, SVG"
("width":240 ⋄ "height":240) •svg (c ⋄ t)

Python

APL functions are Python callables:

from basedpl import fn

mean = fn('+/÷≢')
mean([1, 2, 3])

Arrays have .py, .np and .df conversions for Python values, NumPy and pandas. Functions also have Python names and composition operators. See the Python tutorial.

For other frontends, the process interfaces provide JSON messages and interruptible workers. The APL library contains more algorithms, codecs, interpreters and puzzles. See DEV.md for source installation and contributing.

Release files for basedpl 0.1.11

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for basedpl 0.1.11
File Size Uploaded
basedpl-0.1.11.tar.gz 1.6 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for basedpl 0.1.11
File
basedpl-0.1.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details
basedpl-0.1.11-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
basedpl-0.1.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
basedpl-0.1.11-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
basedpl-0.1.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64 Details
basedpl-0.1.11-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
basedpl-0.1.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64 Details
basedpl-0.1.11-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details

Total release size: 35.3 MB

Release files / basedpl-0.1.11.tar.gz

Download URL basedpl-0.1.11.tar.gz
Size 1.6 MB
Tags Source
SHA-256 checksum
How to use checksums
9a32b560a237dba91b82a831d40865ac0c94c7336ed06a8237a1b27268fa201f
BLAKE2b-256 checksum
How to use checksums
07ae1323af76d688f4c6999b780f90bd3e871cb763e265924b57da6a513c3610
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.

Transparency log

Release files / basedpl-0.1.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL basedpl-0.1.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.7 MB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
15f071319688e04922b6be2b4a9192b6291a368e1245393d3855b4cd2cda72e8
BLAKE2b-256 checksum
How to use checksums
2615756beba7e5810642aec65a7a5e083312c57007060b184e14722549529956
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.

Transparency log

Release files / basedpl-0.1.11-cp313-cp313-macosx_11_0_arm64.whl

Download URL basedpl-0.1.11-cp313-cp313-macosx_11_0_arm64.whl
Size 3.8 MB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
05e0f03c6070438f3f7d0668792f6b90c7fe63906e815d522c8e16a56d5c1dee
BLAKE2b-256 checksum
How to use checksums
2e85c4c2e7ced0cf969c2f18f3e6a0062397871bf5f980f5625a9617960d6c93
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.

Transparency log

Release files / basedpl-0.1.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL basedpl-0.1.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.7 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
90f9e2001b4d90c3f47a4988e1fe17eed6346939e6d08d9fd008ccf0ffb25893
BLAKE2b-256 checksum
How to use checksums
1103da351647df7d5a0bfef6d78592d6999f987263ceeef0fed95876564dcd61
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.

Transparency log

Release files / basedpl-0.1.11-cp312-cp312-macosx_11_0_arm64.whl

Download URL basedpl-0.1.11-cp312-cp312-macosx_11_0_arm64.whl
Size 3.8 MB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
438e0e2460d22b50e492888311559462ab0ee0a2d88749c7fd3c27364f7591dc
BLAKE2b-256 checksum
How to use checksums
416c1dd08a7d1d4981ba9f192476cd188bed5c01b1814239e669cd358ca69465
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.

Transparency log

Release files / basedpl-0.1.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL basedpl-0.1.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.7 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
a9ef88f63383ad6f98cd7f54db9a237174fe579e95e0e19de9eab86f8ddccc5e
BLAKE2b-256 checksum
How to use checksums
78542ab1872d525ccc115be59b4daa45932f6332994af0ced7c4981089e9eca3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.

Transparency log

Release files / basedpl-0.1.11-cp311-cp311-macosx_11_0_arm64.whl

Download URL basedpl-0.1.11-cp311-cp311-macosx_11_0_arm64.whl
Size 3.8 MB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
446a8209b36caa9b94708d5771816aa7f4cdbe41620a389d56b17ecd201ddc96
BLAKE2b-256 checksum
How to use checksums
cc1399ed4b71c55221cc8201ce32259463e3abfdcfd788d5ef2bc612547eab5e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.

Transparency log

Release files / basedpl-0.1.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL basedpl-0.1.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.7 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
aac8ed6995116bb36381f39953b4d4d8e6c39c6ac0597b820bc5344e073b167c
BLAKE2b-256 checksum
How to use checksums
4bb93146c10bf982c2924c225e067bc14642db73db4d688df8464ab9570250b1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.

Transparency log

Release files / basedpl-0.1.11-cp310-cp310-macosx_11_0_arm64.whl

Download URL basedpl-0.1.11-cp310-cp310-macosx_11_0_arm64.whl
Size 3.8 MB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
087e5903e8a22ab32e19ba49e089ea56f98315f86928bb9681bc58f37d33bf1c
BLAKE2b-256 checksum
How to use checksums
5bf8f6d15753fc8929dd7d589bfdfc1de81918af44588532e63320fee5fd788c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.11 This release

9 release files

0.1.10

9 release files

0.1.9

9 release files

0.1.8

9 release files

0.1.7

9 release files

0.1.6

9 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page