Skip to main content

BasedPL

BasedPL, the Based-array Programming Language, is an array language derived from APL, with ideas from J and BQN. Its notation aims to be simple and consistent. Most of this documentation calls it BPL. BPL is written in Rust and comes as a native executable, a Jupyter kernel and a Python API.

LLMs: read llms.txt first. It is the primary reference index and concise overview. In a BPL session, ]help llms shows the same file.

Install and try it

pip install basedpl
bpl

Each release also has a standalone bpl that needs no Python, for macOS on Apple silicon and for Linux on x86-64 and arm64. On a Mac:

curl -Lo bpl https://github.com/AnswerDotAI/basedpl/releases/latest/download/bpl-macos-arm64
chmod +x bpl

On Linux, download bpl-linux-x86_64 or bpl-linux-arm64 instead.

At the prompt, define a mean and apply it:

avg←+/÷≢
avg 2 4 9
5

Use bpl -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. For example, `iota becomes ⍳ when you press Tab or type a non-letter. Abbreviations and Alt-key shortcuts are available. ]help + shows help for +. •prefs changes display settings, such as boxes and how much of a large array shows. See REPL and the glyph reference, which lists each glyph’s key.

In Jupyter, select the installed BasedPL kernel. Cells share definitions and support completion, Shift-Tab help and interruption. You can also use %%bpl cells in a Python notebook. See Using BPL 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 BPL.

Numbers separated by 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 0…9:

+/⍳10
45

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 of 1 to 50 (|⊗⍨↦50), count the zeros down each column (+⌿0=), and find the positions (⍸) whose count is two. Positions count from 0. ≥ increments each position to recover its number:

≥⍸2=+⌿0=|⊗⍨↦50
[2 3 5 7 11 13 17 19 23 29 31 37 41 43 47]ₓ

Getting started builds a primes function from the same divisor count, step by step, and displays the divisibility matrix along the way.

What’s distinctive?

For APL users, some key differences are:

  • Based arrays, as in BQN: numbers, characters and functions are atoms; enclosure always adds a layer.
  • Vectors in brackets, and grouping by spaces. [a b c] is a vector, and a+b × c+d is (a+b)×(c+d). A run that ends in a function is a train. For example, +/÷≢ x is the mean of x, and 2× doubles its argument. 0⌷v and v₀ both select the first item of v.
  • Leading-axis broadcasting, including expansion of length-1 axes, 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.

Positions and axes count from 0, as in BQN and Python. Approximate comparisons use tolerance 1E¯14. See the language principles for why BPL works this way, the glyph reference for Dyalog differences and Arrays for the array model.

Numbers

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

1r3+1r6
1ᵣ2

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

√¯4
0ⱼ2

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

["city":2]⍴["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

A vector of counts keeps the history: one state for each count, where count 0 is the initial value. Here, double up to four times:

2×⍣(⍳5) 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:

⨸360ₓ
[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←[1 2 3]ₓ⌻ ⋄ f∂2ₓ
14ₓ

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

coin←2 0.5 •distribution "binomial"
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 text]←•element "circle" "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

BPL 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 BPL library contains more algorithms, codecs, interpreters and puzzles.

Metadata

Release files for basedpl 0.1.35

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.35
File Size Uploaded
basedpl-0.1.35.tar.gz 2.2 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for basedpl 0.1.35
File
basedpl-0.1.35-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.35-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ ARM64 Details
basedpl-0.1.35-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
basedpl-0.1.35-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.35-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARM64 Details
basedpl-0.1.35-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
basedpl-0.1.35-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.35-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ ARM64 Details
basedpl-0.1.35-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
basedpl-0.1.35-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.35-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ ARM64 Details
basedpl-0.1.35-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details

Total release size: 133.7 MB

Release files / basedpl-0.1.35.tar.gz

Download URL basedpl-0.1.35.tar.gz
Size 2.2 MB
Tags Source
SHA-256 checksum
How to use checksums
de1f3afba9850bb66a15a052f65c951a6925491e333266deab0aefec9f8f32b0
BLAKE2b-256 checksum
How to use checksums
f37c9236dba7a7831d064679da9a5c19077092a93f2001376e253b4a7cf64ec4
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 Oct 9, 2026.

Transparency log

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

Download URL basedpl-0.1.35-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 12.3 MB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
b624c598897eff363d1f9291b9956a12e91c38a75fc93fe8d0be90ef3b3d18b1
BLAKE2b-256 checksum
How to use checksums
cb602c1248612019dee67d3e34bb459f4a910b98ffe52549204fa85fc7839948
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 Oct 9, 2026.

Transparency log

Release files / basedpl-0.1.35-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL basedpl-0.1.35-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 10.5 MB
Tags CPython 3.13 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
2fd77e6dad6a5ab4490202541423b22ea0843414e22da73a399c209d30c512fc
BLAKE2b-256 checksum
How to use checksums
c1e0c132d9476201a2190f513bf8f0218d73157a2ee36cd85881b9a827033ee0
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 Oct 9, 2026.

Transparency log

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

Download URL basedpl-0.1.35-cp313-cp313-macosx_11_0_arm64.whl
Size 10.1 MB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
f31710beab77e8bf7d7983585be5ed998466feecc048226b346a4cb3dee3b38e
BLAKE2b-256 checksum
How to use checksums
ce3147ec940a7709698cf69434389c95b11cc6ae228eaab26e976486a13d0693
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 Oct 9, 2026.

Transparency log

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

Download URL basedpl-0.1.35-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 12.3 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
ace97e9633435c68587081f8c3fd3bdb483c14b73db05f3e3646fa9bac45a52b
BLAKE2b-256 checksum
How to use checksums
f3f4049727e746e0632c7eb36422335f87991d8fb27e916b5589b0ab37c284d4
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 Oct 9, 2026.

Transparency log

Release files / basedpl-0.1.35-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL basedpl-0.1.35-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 10.5 MB
Tags CPython 3.12 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
fb67f64b1465d2208226adc333fe771109f31ea5e3a5be5964024efc31ef8672
BLAKE2b-256 checksum
How to use checksums
2641eb45410a4a795029f012852275690820e3948bdb1998297c7ccc02cf3cd6
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 Oct 9, 2026.

Transparency log

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

Download URL basedpl-0.1.35-cp312-cp312-macosx_11_0_arm64.whl
Size 10.1 MB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
1ad3eaa178d03d000e1832247a2cdeaa4f1f3cfd19d7ec44f0a4f3526d334b6c
BLAKE2b-256 checksum
How to use checksums
76a5f3685748e0240bf21c98e7044eaab5ce269e73235bfde8692822284d85e6
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 Oct 9, 2026.

Transparency log

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

Download URL basedpl-0.1.35-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 12.3 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
1afe1c6565d53d50afdcb2caafec837e569622ecf502599402042a1552f690c1
BLAKE2b-256 checksum
How to use checksums
496b6f5a6862a239e56a66d18db87da76446a23655818bbf6bb5477279e2ff5d
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 Oct 9, 2026.

Transparency log

Release files / basedpl-0.1.35-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL basedpl-0.1.35-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 10.5 MB
Tags CPython 3.11 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
7476b42cf254b24e9d8de1a4e7cfe44fcdcd2fe7ba29c83a3bd27d6357140680
BLAKE2b-256 checksum
How to use checksums
45eee97e3f81cdf74cddfeffec17d1c808ffb9483c93015c6dc5dbaaba57cd27
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 Oct 9, 2026.

Transparency log

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

Download URL basedpl-0.1.35-cp311-cp311-macosx_11_0_arm64.whl
Size 10.1 MB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
37280efa658189db88bf118a734b843eab532831d78ddbe5b0a18bc395bac7a0
BLAKE2b-256 checksum
How to use checksums
1b4fb26b53e795234038dac9b54b019bcad1a450828f2a113d0d44820e2c4941
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 Oct 9, 2026.

Transparency log

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

Download URL basedpl-0.1.35-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 12.3 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
753b435a34e0190b3ea9fec23dc08884df44755f177623d37052e0b507b4a696
BLAKE2b-256 checksum
How to use checksums
6e770d49439d578dac3396d9341230bed9ac314e7ade34263dddbfaf46ce46fe
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 Oct 9, 2026.

Transparency log

Release files / basedpl-0.1.35-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL basedpl-0.1.35-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 10.5 MB
Tags CPython 3.10 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
1b47bfec42ba8e126aaaa2f7feaadaf96443bd1bc05632c5b8945d7897fdaf62
BLAKE2b-256 checksum
How to use checksums
39fc89645a5ed3ae9272d7756c9c27d1129a0c4f637375043740199712875388
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 Oct 9, 2026.

Transparency log

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

Download URL basedpl-0.1.35-cp310-cp310-macosx_11_0_arm64.whl
Size 10.1 MB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
26b116c8dcca1d886e7b0fd9811cf9ba83e36dc050c04b7d1c7d4d965dac1ace
BLAKE2b-256 checksum
How to use checksums
e2a489e7c511de8ad701905dcdbaf87e40b3cd920ecea28d832822d4d4c37b92
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 Oct 9, 2026.

Transparency log
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