Product
Introducing License Enforcement in Socket
Ensure open-source compliance with Socket’s License Enforcement Beta. Set up your License Policy and secure your software!
In what follows python
is an alias for python3.7
or pypy3.7
or any later version (python3.8
, pypy3.8
and so on).
Install the latest pip
& setuptools
packages versions
python -m pip install --upgrade pip setuptools
Download and install the latest stable version from PyPI
repository
python -m pip install --upgrade lz
Download the latest version from GitHub
repository
git clone https://github.com/lycantropos/lz.git
cd lz
Install dependencies
python -m pip install -r requirements.txt
Install
python setup.py install
lz
provides a bunch of utilities for working with functions, predicates & iterables such as
>>> from lz.functional import compose
>>> sum_of_first_n_natural_numbers = compose(sum, range)
>>> sum_of_first_n_natural_numbers(10)
45
>>> from lz.functional import curry
>>> curried_power = curry(pow)
>>> two_to_power = curried_power(2)
>>> two_to_power(10)
1024
flipping positional parameters order
>>> from lz.functional import flip
>>> flipped_power = flip(pow)
>>> flipped_power(2, 3)
9
packing function's arguments
>>> from lz.functional import pack
>>> packed_int = pack(int)
>>> packed_int(['10'])
10
>>> packed_int(['10'], {'base': 2})
2
left partial application
>>> from lz import left
>>> count_from_zero_to = left.applier(range, 0)
>>> list(count_from_zero_to(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
right partial application
>>> from lz import right
>>> square = right.applier(pow, 2)
>>> square(10)
100
negating predicate
>>> from lz.logical import negate
>>> false_like = negate(bool)
>>> false_like([])
True
>>> false_like([0])
False
conjoining predicates
>>> from lz.logical import conjoin
>>> is_valid_constant_identifier = conjoin(str.isupper, str.isidentifier)
>>> is_valid_constant_identifier('SECOND_SECTION')
True
>>> is_valid_constant_identifier('2ND_SECTION')
False
disjoining predicates
>>> from lz.logical import disjoin
>>> alphabetic_or_numeric = disjoin(str.isalpha, str.isnumeric)
>>> alphabetic_or_numeric('Hello')
True
>>> alphabetic_or_numeric('42')
True
>>> alphabetic_or_numeric('Hello42')
False
exclusive disjoining predicates
>>> from lz.logical import exclusive_disjoin
>>> from keyword import iskeyword
>>> valid_object_name = exclusive_disjoin(str.isidentifier, iskeyword)
>>> valid_object_name('valid_object_name')
True
>>> valid_object_name('_')
True
>>> valid_object_name('1')
False
>>> valid_object_name('lambda')
False
reversing sequences and any string streams
>>> from lz.reversal import reverse
>>> list(reverse(range(10)))
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> import io
>>> list(reverse(io.BytesIO(b'Hello\nWorld!')))
[b'World!', b'Hello\n']
chunking iterable
>>> from lz.iterating import chopper
>>> to_triplets = chopper(3)
>>> list(map(tuple, to_triplets(range(10))))
[(0, 1, 2), (3, 4, 5), (6, 7, 8), (9,)]
sliding over iterable
>>> from lz.iterating import slider
>>> slide_pairwise = slider(2)
>>> list(slide_pairwise(range(10)))
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9)]
interleaving iterables
>>> from lz.iterating import interleave
>>> list(interleave([range(10), range(10, 20)]))
[0, 10, 1, 11, 2, 12, 3, 13, 4, 14, 5, 15, 6, 16, 7, 17, 8, 18, 9, 19]
iterable transposition
>>> from lz.transposition import transpose
>>> list(map(tuple, transpose(zip(range(10), range(10, 20)))))
[(0, 1, 2, 3, 4, 5, 6, 7, 8, 9), (10, 11, 12, 13, 14, 15, 16, 17, 18, 19)]
iterable duplication
>>> from lz.replication import duplicate
>>> list(map(tuple, duplicate(range(10))))
[(0, 1, 2, 3, 4, 5, 6, 7, 8, 9), (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)]
and many more.
Install project in editable mode
python -m pip install -e .
Install dependencies
python -m pip install -r docs/requirements.txt
Build docs
cd docs
make html
Install bump2version.
Choose which version number category to bump following semver specification.
Test bumping version
bump2version --dry-run --verbose $CATEGORY
where $CATEGORY
is the target version number category name, possible
values are patch
/minor
/major
.
Bump version
bump2version --verbose $CATEGORY
This will set version to major.minor.patch-alpha
.
Test bumping version
bump2version --dry-run --verbose release
Bump version
bump2version --verbose release
This will set version to major.minor.patch
.
Install dependencies
python -m pip install -r requirements-tests.txt
Plain
pytest
Inside Docker
container:
CPython
docker-compose --file docker-compose.cpython.yml up
PyPy
docker-compose --file docker-compose.pypy.yml up
Bash
script (e.g. can be used in Git
hooks):
with CPython
./run-tests.sh
or
./run-tests.sh cpython
with PyPy
./run-tests.sh pypy
PowerShell
script (e.g. can be used in Git
hooks):
CPython
.\run-tests.ps1
or
.\run-tests.ps1 cpython
PyPy
.\run-tests.ps1 pypy
FAQs
Functional utilities.
We found that lz demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Ensure open-source compliance with Socket’s License Enforcement Beta. Set up your License Policy and secure your software!
Product
We're launching a new set of license analysis and compliance features for analyzing, managing, and complying with licenses across a range of supported languages and ecosystems.
Product
We're excited to introduce Socket Optimize, a powerful CLI command to secure open source dependencies with tested, optimized package overrides.