iterpy
Project description
iterpy
Python has implemented map, filter etc. as functions, rather than methods on a sequence. Since it does not contain a pipe operator, this makes the result harder to read. iterpy exists to change that.
You get this 🔥:
from iterpy import Iter
result = Iter([1,2,3]).map(multiply_by_2).filter(is_even)
Instead of this:
sequence = [1,2,3]
multiplied = [multiply_by_2(x) for x in sequence]
result = [x for x in multiplied if is_even(x)]
Or this:
result = filter(is_even, map(multiply_by_2, [1,2,3]))
Install
uv add iterpy
Usage
from iterpy import Arr
result = (Arr([1, 2])
.filter(lambda x: x % 2 == 0)
.map(lambda x: x * 2)
)
assert result == [4]
from iterpy import Iter
result = (Iter([1, 2])
.filter(lambda x: x % 2 == 0)
.map(lambda x: x * 2)
.to_list()
)
assert result == [4]
Lazy vs eager evaluation
Inspired by Polars, iterpy supports eager evaluation for easier debugging using Arr, and lazy evaluation for better performance using Iter. To access eager evaluation:
from iterpy import Arr
result = Arr([1, 2, 3]).map(lambda x: x * 2).to_list()
assert result == [2, 4, 6]
Arr acts like a Python list, so it has a super simple API you can easily use anywhere.
To access lazy evaluation, just rename Arr to Iter:
from iterpy import Iter
result = Iter([1, 2, 3]).map(lambda x: x * 2).to_list()
assert result == [2, 4, 6]
Prior art
iterpy stands on the shoulders of Scala, Rust etc.
Other Python projects have had similar ideas:
- PyFunctional has existed for 7+ years with a comprehensive feature set. It is performant, with built-in lineage and caching. Unfortunately, this makes typing non-trivial, with a 4+ year ongoing effort to add types.
- flupy is highly similar, well typed, and mature. I had some issues with
.flatten()not being type-hinted correctly, but but your mileage may vary. - Your library here? Feel free to make an issue if you have a good alternative!
Contributing
Setup
- We use
uvfor environment management. Once it is installed, setup the dev environment usingmake dev.
Or, use the devcontainer.
- Install Orbstack or Docker Desktop. Make sure to complete the full install process before continuing.
- If not installed, install VSCode
- Press this link
Changes
-
Make your changes
-
See the makefile for tests, linting, and formatting.
Conventions
- Make it work: Concise syntax borrowed from Scala, Rust etc.
- Make it right: Fully typed in the public interface
- For pyright and ty
- Make it fast:
- Concurrency through
.pmap - (Future): Caching
- (Future): Refactor operations to use generators
- Concurrency through
- Keep it simple: No dependencies
API design
As a heuristic, we follow the APIs of:
In cases where this conflicts with typical python implementations, the API should be as predictable as possible for Python users.
💬 Where to ask questions
| Type | |
|---|---|
| 🚨 Bug Reports | GitHub Issue Tracker |
| 🎁 Feature Requests & Ideas | GitHub Issue Tracker |
| 👩💻 Usage Questions | GitHub Discussions |
| 🗯 General Discussion | GitHub Discussions |
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file iterpy-1.14.0.tar.gz.
File metadata
- Download URL: iterpy-1.14.0.tar.gz
- Upload date:
- Size: 108.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
22bdda576a045cbe7897168d4c0bd519ea29e1ea44310a5427068825b1043a66
|
|
| MD5 |
e277a16f6e4c0b5033e31e4dd93e5740
|
|
| BLAKE2b-256 |
03f88fc1ef1de3bb64b26983f0deb5a99c90a40e45e76684760daf6f13e1e811
|
Provenance
The following attestation bundles were made for iterpy-1.14.0.tar.gz:
Publisher:
release.yml on MartinBernstorff/iterpy
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
iterpy-1.14.0.tar.gz -
Subject digest:
22bdda576a045cbe7897168d4c0bd519ea29e1ea44310a5427068825b1043a66 - Sigstore transparency entry: 809441609
- Sigstore integration time:
-
Permalink:
MartinBernstorff/iterpy@46daac7e4b9a549c627441f5cd2852e768bc3878 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/MartinBernstorff
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@46daac7e4b9a549c627441f5cd2852e768bc3878 -
Trigger Event:
workflow_run
-
Statement type:
File details
Details for the file iterpy-1.14.0-py3-none-any.whl.
File metadata
- Download URL: iterpy-1.14.0-py3-none-any.whl
- Upload date:
- Size: 12.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4689c90c24230cd3ac89e060234173d267aa0ff3ba397043b8f6463f0e897609
|
|
| MD5 |
15946cfc9a6ecd691b30bcb11de807e3
|
|
| BLAKE2b-256 |
2d2a95c1f2c50410c5f25c8eb77afac50de30068f12f28e5ef2b5942f023b137
|
Provenance
The following attestation bundles were made for iterpy-1.14.0-py3-none-any.whl:
Publisher:
release.yml on MartinBernstorff/iterpy
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
iterpy-1.14.0-py3-none-any.whl -
Subject digest:
4689c90c24230cd3ac89e060234173d267aa0ff3ba397043b8f6463f0e897609 - Sigstore transparency entry: 809441637
- Sigstore integration time:
-
Permalink:
MartinBernstorff/iterpy@46daac7e4b9a549c627441f5cd2852e768bc3878 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/MartinBernstorff
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@46daac7e4b9a549c627441f5cd2852e768bc3878 -
Trigger Event:
workflow_run
-
Statement type: