Skip to main content

sourceacademy-sicp

The Source Academy Python standard library, packaged for plain CPython.

Source Academy runs a subset of Python (via py-slang) that adds a standard library for the Structure and Interpretation of Computer Programs (SICP) — pair, head, tail, llist, the math_* functions, streams, and so on. This package provides those same names to ordinary CPython, so that code written for CS1101S or the SICP Python edition runs the same way on your own machine.

Install

pip install sourceacademy-sicp

Use

Put this at the top of your program:

from sicp import *

Then the Source Academy Python standard library is available:

xs = llist(1, 2, 3)
print(xs)                       # [1, [2, [3, None]]]
print_llist(xs)                 # llist(1, 2, 3)
print(list_length([1, 4, 9, 16, 25]))                # 5
print(math_sqrt(2))             # 1.4142135623730951
print(eval_stream(integers_from(1), 4))              # [1, [2, [3, [4, None]]]]

Representation

A pair is a two-element Python list [head, tail], and the empty list is None — exactly as in Source Academy Python. A two-element list is therefore also a pair (is_pair and is_list are both true), matching the frontend's value model, so results print and compare directly against the textbook:

pair("x", 9)      # ['x', 9]
llist(1, 2, 3)    # [1, [2, [3, None]]]

What's included

The library mirrors the groups in py-slang's standard library:

submodule provides
sicp.misc error, arity, real, imag, is_none / is_integer / is_float / is_complex / is_string / is_boolean / is_function / is_number, random_random, time_time
sicp.math math_pi, math_e, math_tau, math_inf, math_nan, and the math_* functions (math_sqrt, math_sin, math_floor, math_comb, …)
sicp.linked_list pair, head, tail, is_pair, llist, print_llist, plus map, filter, reduce, reverse, append, length, member, remove, enum_llist, …
sicp.pair_mutators set_head, set_tail
sicp.list is_list, list_length, equal
sicp.stream stream, stream_map, stream_filter, stream_ref, integers_from, eval_stream, …

from sicp import * brings the whole superset into scope, mirroring the environment students have in Source Academy's Python.

For the full documentation of every function — signatures, descriptions, and worked examples — see the Python §4 standard library reference. Its groups (MISC, MATH, LINKED LISTS, PAIR MUTATORS, LISTS, STREAM, MCE) correspond to the sicp.<group> submodules above.

Compatibility

  • Requires Python 3.10+.
  • is_number mirrors Scheme's number? primitive as used in the textbook.
  • round, abs, len, max, min, str, repr, int, float, complex, bool, print, and input are plain CPython builtins, not reimplementations of Source Academy Python's versions, so a few edge cases differ:
    • arity() raises on a handful of CPython builtins whose signature isn't introspectable (e.g. arity(print), arity(max), arity(min), arity(str)), where Source Academy Python's own arity returns a value.
    • is_function(int) and is_function(str) are True here, since CPython's callable() treats classes as callable — Source Academy Python's tag-based check would say False.
    • max/min accept the single-iterable form (max([1, 2, 3])); Source Academy Python's versions require two or more direct arguments.

Source & development

This package lives in the py-slang repository under python/. py-slang is the reference implementation of Source Academy Python, so keeping the library here — next to the standard library it mirrors (src/stdlib/) — is what keeps the two from drifting apart. Each sicp.<group> submodule corresponds to a py-slang stdlib group.

cd python
python -m pip install -e .        # editable install for development
python -m pytest                  # or: PYTHONPATH=. python tests/test_sicp.py
python -m build                   # build the wheel + sdist

Releasing

Publishing to PyPI is not automatic on push or merge. The CI test job runs on every change under python/**, but the publish job runs only when a GitHub Release is published (.github/workflows/python-package.yml).

One-time setup: configure a PyPI Trusted Publisher for the sourceacademy-sicp project pointing at this repository and the python-package workflow (or swap the publish step for a token-based upload).

To cut a release:

  1. Bump version in pyproject.toml. PyPI rejects re-uploads of an existing version, so this must change every time.
  2. Merge to main.
  3. Create and publish a GitHub Release (a tag such as sicp-vX.Y.Z). Publishing it triggers the publish job, which builds the wheel + sdist and uploads them to PyPI.

License

Apache-2.0. Part of the Source Academy project.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sourceacademy_sicp-0.2.1.tar.gz (16.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sourceacademy_sicp-0.2.1-py3-none-any.whl (15.8 kB view details)

Uploaded Python 3

File details

Details for the file sourceacademy_sicp-0.2.1.tar.gz.

File metadata

  • Download URL: sourceacademy_sicp-0.2.1.tar.gz
  • Upload date:
  • Size: 16.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for sourceacademy_sicp-0.2.1.tar.gz
Algorithm Hash digest
SHA256 d2c66776dc6bc260f0f41d3a0026635dda30f5e668dca346e49d673a0ef2c54c
MD5 e0a81f6d669fa31d37ff8471f4d2df2e
BLAKE2b-256 fdc7bd71c227c26b144771b8abb9356376539680c60ee0956ee06965eb7b77ae

See more details on using hashes here.

Provenance

The following attestation bundles were made for sourceacademy_sicp-0.2.1.tar.gz:

Publisher: python-package.yml on source-academy/py-slang

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sourceacademy_sicp-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for sourceacademy_sicp-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 bb14b3e39f18192a47fe56b38e02c73806a9662a044919b07a5b176d082a221e
MD5 050fa920616f5304a7f6f6d800acf3e0
BLAKE2b-256 65b0fed1e65cef02084838f90ebf04155f515dc9379543f7f2fd0cc53a938269

See more details on using hashes here.

Provenance

The following attestation bundles were made for sourceacademy_sicp-0.2.1-py3-none-any.whl:

Publisher: python-package.yml on source-academy/py-slang

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 files

0.1.0

2 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