• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

source-academy / py-slang / 29009177278
78%

Build:
DEFAULT BRANCH: main
Ran 09 Jul 2026 09:52AM UTC
Jobs 1
Files 87
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

09 Jul 2026 09:43AM UTC coverage: 77.396%. Remained the same
29009177278

push

github

web-flow
Add sourceacademy-sicp: Source Academy Python stdlib for CPython (python/) (#195)

* Add sourceacademy-sicp: the Source Academy Python stdlib for CPython

Moves the CPython `sicp` library (prototyped in the sicp book repo) into
py-slang under python/, next to the standard library it mirrors
(src/stdlib/), so the two don't drift. `from sicp import *` gives plain
CPython the Source Academy Python names (pair/head/tail/llist, math_*,
streams, is_number, ...), so CS1101S / SICP (Python edition) programs run
unchanged under CPython.

- python/sicp/: one submodule per py-slang stdlib group (misc, math,
  linked_list, pair_mutators, list, stream, mce)
- python/tests/: smoke tests (7 cases)
- CI: test matrix (3.10-3.13) on python/** changes; release-gated PyPI
  publish via trusted publishing (.github/workflows/python-package.yml)

The library targets the final SICPy vocabulary (is_integer, is_number,
llist, ...), so it pairs with the renaming in #193 and should land
alongside/after it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Potential fix for pull request finding 'CodeQL / Workflow does not contain permissions'

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* Make sicp prelude iterative for CPython (no tail-call optimization)

CPython does not optimize tail calls, so the textbook-style recursive
prelude functions raise RecursionError on linked lists / streams of
~1000+ elements. Rewrite the flagged functions iteratively:

  linked_list: is_llist, length, map, build_llist, for_each, reverse,
               append, member, remove, remove_all, enum_llist,
               llist_ref, reduce, filter
  stream:      stream_to_llist, stream_length, stream_for_each,
               eval_stream, stream_ref

Also add nonnegative-input guards to build_llist, llist_ref, stream_ref
and eval_stream (a negative count would otherwise recurse forever), and
make arity() fail gracefully when a c... (continued)

2608 of 3650 branches covered (71.45%)

Branch coverage included in aggregate %.

6120 of 7627 relevant lines covered (80.24%)

14081.4 hits per line

Jobs
ID Job ID Ran Files Coverage
1 29009177278.1 09 Jul 2026 09:52AM UTC 87
77.4
GitHub Action Run
Source Files on build 29009177278
  • Tree
  • List 87
  • Changed 0
  • Source Changed 0
  • Coverage Changed 0
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #29009177278
  • 79c30ec1 on github
  • Prev Build on main (#28991235533)
  • Next Build on main (#29009577486)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc