Skip to main content

east-py-cli

License: BSL 1.1

Command-line interface for running East IR programs with Python platform functions.

Installation

uv add east-py-cli

# Platform packages are installed separately as needed
uv add east-py-std          # console, crypto, fetch, fs, path, random, time
uv add east-py-io           # s3, sqlite, postgres, mysql, redis, mongodb, xlsx, xml, gzip, tar, zip, ftp, sftp
uv add east-py-datascience  # sklearn, scipy, xgboost, lightgbm, ngboost, torch, shap, optuna, simanneal, mads

Usage

Running Programs

# Run with platform packages
east-py run program.beast2 -p east-py-std

# Run with multiple platforms
east-py run program.json -p east-py-std -p east-py-io -p east-py-datascience

# With input and output files
east-py run program.beast2 \
  -p east-py-std \
  --input data.beast2 \
  --input config.json \
  --output result.beast2

# Verbose output
east-py run program.beast2 -p east-py-std -v

Streaming Outputs

A function whose trailing parameter is an emit capability writes its output incrementally instead of returning it; a large collection input can be fed lazily, one decoded segment at a time (--stream is repeatable):

# Emit a Dict (or array / set) through the trailing parameter, feeding
# inputs 0 and 1 lazily from indexed beast2 blobs
east-py run task.beast2 -p east-py-std \
  -i rows.beast2 -i more.beast2 --stream 0 --stream 1 \
  --emit dict -o out.beast2 -v

The sink is east-c's, so it writes the same bytes as east-c run. Dict and Set emissions must ascend in East order. The sink writes one pass, segment by segment, with one open batch in memory whatever the size of the output, and a key below the previous one is an error naming both:

beast2 v5: Dict key emitted out of order: 1 after 2 — Set/Dict emissions must ascend in East order

Equal keys are an error too unless the sink folds them:

# Dict: fold the values of adjacent equal keys with an East function (K, V, V) -> V
east-py run task.beast2 -p east-py-std --emit dict --merge merge.beast2 -o out.beast2

# Set: keep the first of adjacent equal elements
east-py run task.beast2 -p east-py-std --emit set --union -o out.beast2

--merge takes an IR file in any format the program itself may use, compiled with the run's -p platforms; its signature must match the emit parameter's key and value types. Adjacent equal keys fold left in emission order, acc = merge(key, acc, value), and the output is byte-identical to what the sink writes without the flag for the already-folded sequence.

Merging blobs

merge combines sorted Set or Dict blobs of one type — the files run --emit writes — into one, in a single pass over the inputs: every input is read segment by segment, equal keys across inputs fold in input order (--merge on Dict inputs, --union on Set inputs; without a fold an equal key is an error), and the output is byte-identical to what run --emit writes for the same entries emitted ascending. This is how e3 assembles a partitioned task's keyed partials; all three runners write the same bytes.

# Dict partials: fold the values of equal keys, in input order
east-py merge --merge merge.beast2 -i part-0.beast2 -i part-1.beast2 -i part-2.beast2 -o out.beast2 -v

# Set partials: the first of equal elements stands
east-py merge --union -i part-0.beast2 -i part-1.beast2 -o out.beast2

# Only the keys in [from, to): range.beast2 holds a Struct{from: Option<K>,
# to: Option<K>} over the inputs' key type, an absent bound open
east-py merge --merge merge.beast2 --range range.beast2 -i part-0.beast2 -i part-1.beast2 -o out.beast2

With --range every input is sought to the segment owning from through its fences and read up to the first key at or past to, so a merge over one key range of large partials reads that range's share of each, plus at most one segment — how e3 merges a large output in parallel, one range per unit.

An input of another type than the first, an Array input, an input whose keys do not ascend, a fold whose signature does not match the inputs, and bounds of another type than the inputs' key are refused, naming the input. With -v the merge prints its account:

merge: 3 input(s), 31 entries, 13 fold(s)

Exiting with the Parent

With --exit-with-parent on its command line (run and merge) the runner watches its stdin on a native thread — one that runs while the body holds the GIL — and exits with status 1 as soon as a read returns end of file or fails. A parent that spawns the runner with a stdin pipe it never writes to — as e3 does — takes the runner down with it when it dies, even while the body is computing. Without the flag, stdin is left alone.

east-py run task.beast2 --exit-with-parent -p east-py-std --emit dict -o out.beast2

On Windows the watcher (east-c's) reads a synchronous pipe or an overlapped one. Hand it an overlapped pipe — FILE_FLAG_OVERLAPPED, or Node's stdio 'overlapped', as e3 does: a read pending on a synchronous pipe holds the pipe's file-object lock, so any other use of stdin in the runner — a sys.stdin.isatty() in a platform package, say — would wait until the parent is gone.

Version and Platform Info

# Show CLI version
east-py version

# Show version with platform info
east-py version -p east-py-std -p east-py-io

Example output:

east-py-cli 0.1.0
east-py 0.1.0

Platforms:
  east-py-std 0.1.0 (47 platform functions)
  east-py-io 0.1.0 (59 platform functions)

Transpiling and Exporting Functions

# Print an IR program (from any runtime) as python East.function source
east-py transpile program.beast2 -o program.py --name main

# Write a module's `east_functions` dict as a function manifest that a
# TypeScript e3 task imports with East.importFunction (or python with
# East.import_function); -p names the platform packages implementing any
# platform calls the functions make
east-py export-functions pricing.functions -o pricing.functions.beast2 -p east-py-std

# Only the functions an importer uses (--only, repeatable): a sibling function's
# platform call then needs no -p package
east-py export-functions pricing.functions -o pricing.functions.beast2 --only score

Linting East bodies

The build refuses python that has no East form — x // 2 on an expression, an f-string over one, if on one, a callback reaching for np — and says what to write instead. east-py lint says the same thing at edit time, in the same words, over every .py file that imports east:

east-py lint src/                       # one `file:line:col: category [rule] message` per finding; exit 1 on any
east-py lint src/ --format json         # the findings as records
east-py lint src/ --disable no-deprecated-alias
east-py lint --list-rules               # EAS001 body-takes-block-first … EAS009 no-discarded-expression

A line ending in # noqa (or # noqa: EAS002) is skipped, as under ruff. The same rules run inside flake8 once east-py-cli is installed (flake8 --select EAS), and east-py lsp serves them to any editor over the Language Server Protocol (pip install 'east-py-cli[lsp]' for pygls).

File Formats

IR and data files are auto-detected by extension:

Extension Format
.beast2, .beast Binary East v2
.east East text format
.json JSON

Creating Platform Packages

Platform packages must export a platform attribute containing a list of platform functions:

# my_platform/__init__.py
from east import East, IntegerType, StringType

@East.platform_function(inputs=[StringType], output=IntegerType, name="my_func")   # paired by name with
def my_func(s):                                                                   # East.platform("my_func", …)
    return len(s)

platform = East.platform_functions(__name__)

Claude Code plugin

The East ecosystem also ships a Claude Code plugin — East language skills, example search, and preemptive diagnostics for East code — installed separately from the elaraai marketplace:

# Inside Claude Code
/plugin marketplace add elaraai/east-workspace
/plugin install east@elaraai
# From a terminal
claude plugin marketplace add elaraai/east-workspace
claude plugin install east@elaraai

License

BSL 1.1 (Business Source License):

  • Non-production use (evaluation, testing, development) is free
  • Production use by or on behalf of for-profit entities requires a commercial license
  • Code becomes AGPL-3.0 four years after each release

See LICENSE.md for full details.

Commercial licensing: support@elara.ai

Ecosystem

  • East: Statically typed, expression-based language with serializable IR. Run portable logic across TypeScript, Python, C, and other runtimes.

    • @elaraai/east: Core language SDK with type system, expressions, and reference JS compiler
  • East Node: Node.js platform functions for I/O, databases, and system operations.

  • East C: C11 native runtime for executing East IR. Distributed via npm (launcher + per-platform optional dependencies) and as tarballs on each GitHub Release.

    • @elaraai/east-c-cli: npm launcher — installs the matching native binary as an optional dependency
    • east-c: Core runtime — type system, IR interpreter, builtins, serialization (Beast2, JSON, CSV, East text)
    • east-c-std: Console, FileSystem, Fetch, Crypto, Time, Path, Random
    • east-c-cli: CLI for running East IR programs natively
  • East Python: Python runtime, standard platform, I/O, and data-science platform functions. Published to PyPI.

    • east-py: Core Python runtime — type system, IR compiler, 212+ builtins, Cython-accelerated hot paths
    • east-py-std: Console, FileSystem, Fetch, Crypto, Time, Path, Random
    • east-py-io: SQLite, PostgreSQL, MySQL, MongoDB, Redis, S3, FTP, SFTP, XLSX, XML, compression
    • east-py-cli: CLI for running East IR programs in Python
    • east-py-datascience (PyPI) + @elaraai/east-py-datascience (npm): Optimization (MADS, Optuna, ALNS, GoogleOR), ML (XGBoost, LightGBM, NGBoost, PyTorch, Lightning, GP), Bayesian inference (PyMC), explainability (SHAP), conformal prediction (MAPIE)
  • East UI: Typed UI component definitions and React renderer, plus VS Code preview.

  • e3 — East Execution Engine: Durable execution engine for running East pipelines at scale. Git-like content-addressable storage, automatic memoization, reactive dataflow, real-time monitoring.

About Elara

East is developed by Elara AI Pty Ltd, an AI-powered platform that creates economic digital twins of businesses that optimize performance. Elara combines business objectives, decisions and data to help organizations make data-driven decisions across operations, purchasing, sales and customer engagement, and project and investment planning. East powers the computational layer of Elara solutions, enabling the expression of complex business logic and data in a simple, type-safe and portable language.


Developed by Elara AI Pty Ltd.


Developed by Elara AI Pty Ltd

Metadata

Release files for elaraai-east-py-cli 1.0.78

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

Source distribution (sdist)

Source distribution for elaraai-east-py-cli 1.0.78
File Size Uploaded
elaraai_east_py_cli-1.0.78.tar.gz 58.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for elaraai-east-py-cli 1.0.78
File Interpreter ABI Platform
elaraai_east_py_cli-1.0.78-py3-none-any.whl Python 3 none any Details

Total release size: 97.6 kB

Release files / elaraai_east_py_cli-1.0.78.tar.gz

Download URL elaraai_east_py_cli-1.0.78.tar.gz
Size 58.9 kB
Tags Source
SHA-256 checksum
How to use checksums
93e5d24eb6b9b4165e73a1868ee13ad5cae57d55d81eea448efe7a93c28cee29
BLAKE2b-256 checksum
How to use checksums
b083d5e8908f0b092ebadf4f61d01805ab36d68426479909c9c40434fa28c202
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / elaraai_east_py_cli-1.0.78-py3-none-any.whl

Download URL elaraai_east_py_cli-1.0.78-py3-none-any.whl
Size 38.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a77fb32b1e13d2720d9f2c7de6c1c43c6bc4a4797562039a4cb6dd4b970d1aca
BLAKE2b-256 checksum
How to use checksums
8c057c2aaedb9d2df9ff394178ba6e023d95178ce612d5539766ca817a6a377f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

1.0.93

2 release files

1.0.92

2 release files

1.0.91

2 release files

1.0.90

2 release files

1.0.89

2 release files

1.0.88

2 release files

1.0.87

2 release files

1.0.83

2 release files

1.0.82

2 release files

1.0.81

2 release files

1.0.80

2 release files

1.0.79

2 release files

This release

1.0.78 This release

2 release files

1.0.77

2 release files

1.0.76

2 release files

1.0.75

2 release files

1.0.68

2 release files

1.0.67

2 release files

1.0.66

2 release files

1.0.65

2 release files

1.0.64

2 release files

1.0.63

2 release files

1.0.62

2 release files

1.0.61

2 release files

1.0.53

2 release files

1.0.52

2 release files

1.0.51

2 release files

1.0.50

2 release files

1.0.49

2 release files

1.0.48

2 release files

1.0.47

2 release files

1.0.46

2 release files

1.0.45

2 release files

1.0.44

2 release files

1.0.43

2 release files

1.0.42

2 release files

1.0.41

2 release files

1.0.40

2 release files

1.0.39

2 release files

1.0.38

2 release files

1.0.37

2 release files

1.0.36

2 release files

1.0.35

2 release files

1.0.34

2 release files

1.0.33

2 release files

1.0.32

2 release files

1.0.31

2 release files

1.0.28

2 release files

1.0.27

2 release files

1.0.26

2 release files

1.0.25

2 release files

1.0.24

2 release files

1.0.23

2 release files

1.0.22

2 release files

1.0.21

2 release files

1.0.20

2 release files

1.0.19

2 release files

1.0.18

2 release files

1.0.17

2 release files

1.0.16

2 release files

1.0.15

2 release files

1.0.14

2 release files

1.0.13

2 release files

1.0.12

2 release files

1.0.11

2 release files

1.0.10

2 release files

1.0.9

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 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