pythonic-fp.iterables 5.1.2__tar.gz → 5.1.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pythonic_fp_iterables-5.1.4/.github/workflows/static.yml +64 -0
- {pythonic_fp_iterables-5.1.2 → pythonic_fp_iterables-5.1.4}/.gitignore +2 -0
- {pythonic_fp_iterables-5.1.2 → pythonic_fp_iterables-5.1.4}/CHANGELOG.rst +6 -0
- {pythonic_fp_iterables-5.1.2 → pythonic_fp_iterables-5.1.4}/PKG-INFO +13 -12
- {pythonic_fp_iterables-5.1.2 → pythonic_fp_iterables-5.1.4}/README.rst +6 -5
- pythonic_fp_iterables-5.1.4/docs/Makefile +78 -0
- pythonic_fp_iterables-5.1.4/docs/gen_conf.py +110 -0
- pythonic_fp_iterables-5.1.4/docs/requirements.txt +2 -0
- pythonic_fp_iterables-5.1.4/docs/source/_static/custom.css +3 -0
- pythonic_fp_iterables-5.1.4/docs/source/api/drop_take.rst +6 -0
- pythonic_fp_iterables-5.1.4/docs/source/api/folding.rst +6 -0
- pythonic_fp_iterables-5.1.4/docs/source/api/index.rst +25 -0
- pythonic_fp_iterables-5.1.4/docs/source/api/merging.rst +6 -0
- pythonic_fp_iterables-5.1.4/docs/source/changelog.rst +7 -0
- pythonic_fp_iterables-5.1.4/docs/source/description.rst +7 -0
- pythonic_fp_iterables-5.1.4/docs/source/index.rst +30 -0
- pythonic_fp_iterables-5.1.4/docs/source/releases.rst +26 -0
- pythonic_fp_iterables-5.1.4/docs/source/usage.rst +30 -0
- {pythonic_fp_iterables-5.1.2 → pythonic_fp_iterables-5.1.4}/pyproject.toml +26 -19
- pythonic_fp_iterables-5.1.4/src/pythonic_fp/iterables/__init__.py +36 -0
- pythonic_fp_iterables-5.1.4/src/pythonic_fp/iterables/__init__.pyi +0 -0
- pythonic_fp_iterables-5.1.4/src/pythonic_fp/iterables/drop_take.py +202 -0
- {pythonic_fp_iterables-5.1.2 → pythonic_fp_iterables-5.1.4}/src/pythonic_fp/iterables/folding.py +104 -73
- pythonic_fp_iterables-5.1.4/src/pythonic_fp/iterables/merging.py +168 -0
- pythonic_fp_iterables-5.1.4/src/pythonic_fp/iterables/py.typed +0 -0
- pythonic_fp_iterables-5.1.2/src/pythonic_fp/iterables/__init__.py +0 -42
- pythonic_fp_iterables-5.1.2/src/pythonic_fp/iterables/drop_take.py +0 -166
- pythonic_fp_iterables-5.1.2/src/pythonic_fp/iterables/merging.py +0 -146
- {pythonic_fp_iterables-5.1.2 → pythonic_fp_iterables-5.1.4}/LICENSE +0 -0
- /pythonic_fp_iterables-5.1.2/src/pythonic_fp/iterables/__init__.pyi → /pythonic_fp_iterables-5.1.4/docs/source/_static/.gitkeep +0 -0
- /pythonic_fp_iterables-5.1.2/src/pythonic_fp/iterables/py.typed → /pythonic_fp_iterables-5.1.4/docs/source/_templates/.gitkeep +0 -0
- {pythonic_fp_iterables-5.1.2 → pythonic_fp_iterables-5.1.4}/src/pythonic_fp/iterables/drop_take.pyi +0 -0
- {pythonic_fp_iterables-5.1.2 → pythonic_fp_iterables-5.1.4}/src/pythonic_fp/iterables/folding.pyi +0 -0
- {pythonic_fp_iterables-5.1.2 → pythonic_fp_iterables-5.1.4}/src/pythonic_fp/iterables/merging.pyi +0 -0
- {pythonic_fp_iterables-5.1.2 → pythonic_fp_iterables-5.1.4}/tests/test_fold.py +0 -0
- {pythonic_fp_iterables-5.1.2 → pythonic_fp_iterables-5.1.4}/tests/test_iterable.py +0 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
name: Build and Deploy Furo Themed Sphinx Documentation
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: ["main"]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
env:
|
|
9
|
+
RELEASE: '5.1.4'
|
|
10
|
+
DEVEL: '5.1.5'
|
|
11
|
+
PYTHON: '3.14'
|
|
12
|
+
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
pages: write
|
|
16
|
+
id-token: write
|
|
17
|
+
|
|
18
|
+
concurrency:
|
|
19
|
+
group: "pages"
|
|
20
|
+
cancel-in-progress: false
|
|
21
|
+
|
|
22
|
+
jobs:
|
|
23
|
+
deploy:
|
|
24
|
+
runs-on: ubuntu-latest
|
|
25
|
+
environment:
|
|
26
|
+
name: github-pages
|
|
27
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
28
|
+
steps:
|
|
29
|
+
- name: Checkout
|
|
30
|
+
uses: actions/checkout@v6
|
|
31
|
+
|
|
32
|
+
- name: Select Python
|
|
33
|
+
uses: actions/setup-python@v6
|
|
34
|
+
with:
|
|
35
|
+
python-version: '3.14'
|
|
36
|
+
|
|
37
|
+
- name: Install Sphinx Dependencies
|
|
38
|
+
run: |
|
|
39
|
+
pip install -r docs/requirements.txt
|
|
40
|
+
sudo apt-get install -y graphviz
|
|
41
|
+
|
|
42
|
+
- name: Build Release Docs
|
|
43
|
+
run: |
|
|
44
|
+
pip install pythonic-fp-iterables
|
|
45
|
+
docs/gen_conf.py release ${{ env.RELEASE }} Iterables iterables > docs/source/conf.py
|
|
46
|
+
sphinx-build -M html docs/source docs/build/release
|
|
47
|
+
|
|
48
|
+
- name: Build Development Docs
|
|
49
|
+
run: |
|
|
50
|
+
pip install -e .
|
|
51
|
+
docs/gen_conf.py devel ${{ env.DEVEL }} Iterables iterables > docs/source/conf.py
|
|
52
|
+
sphinx-build -M html docs/source docs/build/development
|
|
53
|
+
|
|
54
|
+
- name: Setup Pages
|
|
55
|
+
uses: actions/configure-pages@v6
|
|
56
|
+
|
|
57
|
+
- name: Upload Artifact
|
|
58
|
+
uses: actions/upload-pages-artifact@v5
|
|
59
|
+
with:
|
|
60
|
+
path: docs/build
|
|
61
|
+
|
|
62
|
+
- name: Deploy to GitHub Pages
|
|
63
|
+
uses: actions/deploy-pages@v5
|
|
64
|
+
id: deployment
|
|
@@ -17,6 +17,12 @@ See `Semantic Versioning 2.0.0 <https://semver.org>`_.
|
|
|
17
17
|
Releases and Important Milestones
|
|
18
18
|
---------------------------------
|
|
19
19
|
|
|
20
|
+
Development Status Reappraisal - 2026-05-05
|
|
21
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
22
|
+
|
|
23
|
+
Maintainer appraised the Development Status for
|
|
24
|
+
pythonic-fp-iterables to be ``"5 - Production/Stable"``.
|
|
25
|
+
|
|
20
26
|
PyPI 5.1.1 - 2025-08-02
|
|
21
27
|
~~~~~~~~~~~~~~~~~~~~~~~
|
|
22
28
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pythonic-fp-iterables
|
|
3
|
-
Version: 5.1.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 5.1.4
|
|
4
|
+
Summary: .. admonition:: Composing and iterating iterables
|
|
5
5
|
Keywords: iterables,iterators
|
|
6
6
|
Author-email: "Geoffrey R. Scheller" <geoffrey@scheller.com>
|
|
7
7
|
Requires-Python: >=3.13
|
|
@@ -11,15 +11,15 @@ Classifier: Framework :: Pytest
|
|
|
11
11
|
Classifier: Intended Audience :: Developers
|
|
12
12
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
13
13
|
Classifier: Operating System :: OS Independent
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
15
15
|
Classifier: Typing :: Typed
|
|
16
16
|
License-File: LICENSE
|
|
17
|
-
Requires-Dist: pythonic-fp-fptools>=5.
|
|
18
|
-
Requires-Dist: pythonic-fp-gadgets>=
|
|
17
|
+
Requires-Dist: pythonic-fp-fptools>=5.2.0
|
|
18
|
+
Requires-Dist: pythonic-fp-gadgets>=4.0.2
|
|
19
19
|
Requires-Dist: pytest>=8.4.1 ; extra == "test"
|
|
20
20
|
Project-URL: Changelog, https://github.com/grscheller/pythonic-fp-iterables/blob/main/CHANGELOG.rst
|
|
21
|
-
Project-URL: Documentation, https://grscheller.github.io/pythonic-fp/iterables
|
|
22
|
-
Project-URL: Homepage, https://grscheller.github.io/pythonic-fp/
|
|
21
|
+
Project-URL: Documentation, https://grscheller.github.io/pythonic-fp/projects/iterables.html
|
|
22
|
+
Project-URL: Homepage, https://grscheller.github.io/pythonic-fp/
|
|
23
23
|
Project-URL: Source, https://github.com/grscheller/pythonic-fp-iterables
|
|
24
24
|
Provides-Extra: test
|
|
25
25
|
|
|
@@ -27,7 +27,8 @@ Pythonic FP - Tools for iterables
|
|
|
27
27
|
=================================
|
|
28
28
|
|
|
29
29
|
PyPI project
|
|
30
|
-
`pythonic-fp
|
|
30
|
+
`pythonic-fp-iterators
|
|
31
|
+
<https://pypi.org/project/pythonic-fp-iterables>`_.
|
|
31
32
|
|
|
32
33
|
Library of functions for iterating iterables.
|
|
33
34
|
|
|
@@ -44,19 +45,19 @@ Library of functions for iterating iterables.
|
|
|
44
45
|
|
|
45
46
|
Part of the
|
|
46
47
|
`pythonic-fp
|
|
47
|
-
<https://grscheller.github.io/pythonic-fp
|
|
48
|
+
<https://grscheller.github.io/pythonic-fp/>`_
|
|
48
49
|
PyPI projects.
|
|
49
50
|
|
|
50
51
|
Documentation
|
|
51
52
|
-------------
|
|
52
53
|
|
|
53
|
-
Documentation for this project
|
|
54
|
+
Documentation and other links for this project are hosted on
|
|
54
55
|
`GitHub Pages
|
|
55
|
-
<https://grscheller.github.io/pythonic-fp/iterables
|
|
56
|
+
<https://grscheller.github.io/pythonic-fp/projects/iterables.html>`_.
|
|
56
57
|
|
|
57
58
|
Copyright and License
|
|
58
59
|
---------------------
|
|
59
60
|
|
|
60
|
-
Copyright (c) 2023-
|
|
61
|
+
Copyright (c) 2023-2026 Geoffrey R. Scheller. Licensed under the Apache
|
|
61
62
|
License, Version 2.0. See the LICENSE file for details.
|
|
62
63
|
|
|
@@ -2,7 +2,8 @@ Pythonic FP - Tools for iterables
|
|
|
2
2
|
=================================
|
|
3
3
|
|
|
4
4
|
PyPI project
|
|
5
|
-
`pythonic-fp
|
|
5
|
+
`pythonic-fp-iterators
|
|
6
|
+
<https://pypi.org/project/pythonic-fp-iterables>`_.
|
|
6
7
|
|
|
7
8
|
Library of functions for iterating iterables.
|
|
8
9
|
|
|
@@ -19,18 +20,18 @@ Library of functions for iterating iterables.
|
|
|
19
20
|
|
|
20
21
|
Part of the
|
|
21
22
|
`pythonic-fp
|
|
22
|
-
<https://grscheller.github.io/pythonic-fp
|
|
23
|
+
<https://grscheller.github.io/pythonic-fp/>`_
|
|
23
24
|
PyPI projects.
|
|
24
25
|
|
|
25
26
|
Documentation
|
|
26
27
|
-------------
|
|
27
28
|
|
|
28
|
-
Documentation for this project
|
|
29
|
+
Documentation and other links for this project are hosted on
|
|
29
30
|
`GitHub Pages
|
|
30
|
-
<https://grscheller.github.io/pythonic-fp/iterables
|
|
31
|
+
<https://grscheller.github.io/pythonic-fp/projects/iterables.html>`_.
|
|
31
32
|
|
|
32
33
|
Copyright and License
|
|
33
34
|
---------------------
|
|
34
35
|
|
|
35
|
-
Copyright (c) 2023-
|
|
36
|
+
Copyright (c) 2023-2026 Geoffrey R. Scheller. Licensed under the Apache
|
|
36
37
|
License, Version 2.0. See the LICENSE file for details.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Makefile for Sphinx documentation
|
|
2
|
+
|
|
3
|
+
# Last and future releases
|
|
4
|
+
# - former needs to agree with PyPI
|
|
5
|
+
# - later needs to agree with pyproject.toml
|
|
6
|
+
PROJECT_NAME = Iterables
|
|
7
|
+
PYPI_NAME = iterables
|
|
8
|
+
RELEASE_VERSION = 5.1.4
|
|
9
|
+
DEVEL_VERSION = 5.1.5
|
|
10
|
+
CUSTOM_VERSION = 0.0.0
|
|
11
|
+
|
|
12
|
+
SPHINXOPTS ?=
|
|
13
|
+
SPHINXBUILD ?= sphinx-build
|
|
14
|
+
SOURCEDIR = source
|
|
15
|
+
BUILDDIR = build
|
|
16
|
+
|
|
17
|
+
STATICDIR = source/_static
|
|
18
|
+
TEMPLATEDIR = source/_templates
|
|
19
|
+
|
|
20
|
+
# Put help first so that "make" without argument is like "make help".
|
|
21
|
+
help:
|
|
22
|
+
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS)
|
|
23
|
+
|
|
24
|
+
clean_source:
|
|
25
|
+
@rm -f "$(SOURCEDIR)"/conf.py
|
|
26
|
+
|
|
27
|
+
clean_devel:
|
|
28
|
+
@rm -rf "$(BUILDDIR)"/development
|
|
29
|
+
|
|
30
|
+
clean_release:
|
|
31
|
+
@rm -rf "$(BUILDDIR)"/release
|
|
32
|
+
|
|
33
|
+
clean_custom:
|
|
34
|
+
@rm -rf "$(BUILDDIR)"/custom
|
|
35
|
+
|
|
36
|
+
clean: clean_devel clean_release clean_custom clean_source
|
|
37
|
+
@rm -rf $(BUILDDIR)
|
|
38
|
+
@echo Removed all doc build artifacts.
|
|
39
|
+
|
|
40
|
+
setup_devel: clean_devel
|
|
41
|
+
@./gen_conf.py devel "$(DEVEL_VERSION)" "$(PROJECT_NAME)" "$(PYPI_NAME)" > "$(SOURCEDIR)"/conf.py
|
|
42
|
+
|
|
43
|
+
setup_release: clean_release
|
|
44
|
+
@./gen_conf.py release "$(RELEASE_VERSION)" "$(PROJECT_NAME)" "$(PYPI_NAME)" > "$(SOURCEDIR)"/conf.py
|
|
45
|
+
|
|
46
|
+
setup_custom: clean_custom
|
|
47
|
+
@./gen_conf.py custom "$(CUSTOM_VERSION)" "$(PROJECT_NAME)" "$(PYPI_NAME)" > "$(SOURCEDIR)"/conf.py
|
|
48
|
+
|
|
49
|
+
setup_redo: clean_custom
|
|
50
|
+
@echo Redoing custom build with a possibly reeditted conf.py
|
|
51
|
+
@./gen_conf.py redo "" "" ""
|
|
52
|
+
|
|
53
|
+
# Build development labeled html docs.
|
|
54
|
+
devel: Makefile setup_devel
|
|
55
|
+
@$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)"/development $(SPHINXOPTS)
|
|
56
|
+
|
|
57
|
+
# Build release labeled html docs.
|
|
58
|
+
release: Makefile setup_release
|
|
59
|
+
@$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)"/release $(SPHINXOPTS)
|
|
60
|
+
|
|
61
|
+
# Build custom labeled html docs.
|
|
62
|
+
custom: Makefile setup_custom
|
|
63
|
+
@$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)"/custom $(SPHINXOPTS)
|
|
64
|
+
|
|
65
|
+
# Build HTML docs with previous generated (possibly hand edited) source/conf.py,
|
|
66
|
+
# put results in $(BUILDDIR)/custom.
|
|
67
|
+
redo: Makefile setup_redo
|
|
68
|
+
@$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)"/custom $(SPHINXOPTS)
|
|
69
|
+
|
|
70
|
+
# Catch-all target: route all unknown targets to Sphinx and save to $(BUILDDIR)/custom.
|
|
71
|
+
# Reuse a previously generated source/conf.py.
|
|
72
|
+
%: Makefile setup_redo
|
|
73
|
+
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)"/custom $(SPHINXOPTS)
|
|
74
|
+
|
|
75
|
+
.PHONY: help Makefile
|
|
76
|
+
.PHONY: setup_devel setup_release setup_custom
|
|
77
|
+
.PHONY: devel release
|
|
78
|
+
.PHONY: clean_source clean_devel clean_release clean_custom clean
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# Generate conf.py Sphinx configuration executable
|
|
3
|
+
|
|
4
|
+
import sys
|
|
5
|
+
import os
|
|
6
|
+
|
|
7
|
+
project_prefix = 'Pythonic FP'
|
|
8
|
+
pypi_prefix = 'pythonic-fp'
|
|
9
|
+
author = 'Geoffrey R. Scheller'
|
|
10
|
+
copyright = f'2023-2026, {author}'
|
|
11
|
+
|
|
12
|
+
args = sys.argv[1:]
|
|
13
|
+
num_args = len(args)
|
|
14
|
+
|
|
15
|
+
if num_args == 4:
|
|
16
|
+
build_type, version, project_name, pypi_name = args
|
|
17
|
+
project = project_prefix + ' - ' + project_name
|
|
18
|
+
pypi_project_repo = pypi_prefix + '-' + pypi_name
|
|
19
|
+
project_url_rst = f'`{project} <https://pypi.org/project/{pypi_project_repo}/>`_'
|
|
20
|
+
homepage_url_rst = f'`{project_prefix} <https://grscheller.github.io/{pypi_prefix}/>`_'
|
|
21
|
+
|
|
22
|
+
else:
|
|
23
|
+
sys.exit('Error: gen_conf.py takes exactly 4 arguments')
|
|
24
|
+
|
|
25
|
+
match build_type:
|
|
26
|
+
case 'custom':
|
|
27
|
+
release = f'{version}'
|
|
28
|
+
release_string = f'**Custom PyPI Non-release version {release}**'
|
|
29
|
+
case 'devel':
|
|
30
|
+
release = f'{version}'
|
|
31
|
+
release_string = f'**Proposed PyPI release version {release}**'
|
|
32
|
+
case 'release':
|
|
33
|
+
release = f'{version}'
|
|
34
|
+
release_string = f'**PyPI release version {release}**'
|
|
35
|
+
case 'redo':
|
|
36
|
+
if not os.path.isfile('source/conf.py'):
|
|
37
|
+
sys.exit('Error: cannot redo without source/conf.py')
|
|
38
|
+
sys.exit()
|
|
39
|
+
case _:
|
|
40
|
+
sys.exit(f'Error: unknown built_type {build_type} given')
|
|
41
|
+
|
|
42
|
+
print(f'''# Generated conf.py Sphinx configuration executable
|
|
43
|
+
|
|
44
|
+
from typing import Any
|
|
45
|
+
from sphinx.application import Sphinx
|
|
46
|
+
|
|
47
|
+
project = '{project}'
|
|
48
|
+
author = '{author}'
|
|
49
|
+
copyright = '{copyright}'
|
|
50
|
+
release = '{release}'
|
|
51
|
+
release_string = '{release_string}'
|
|
52
|
+
|
|
53
|
+
def skip_abc_methods(
|
|
54
|
+
app: Any, what: str, name: str, obj: Any, skip: bool, options: Any
|
|
55
|
+
) -> bool:
|
|
56
|
+
if name in [
|
|
57
|
+
'__init_subclass__',
|
|
58
|
+
'__subclasshook__',
|
|
59
|
+
'__class_getitem__',
|
|
60
|
+
'__weakref__',
|
|
61
|
+
]:
|
|
62
|
+
return True # Skip these members
|
|
63
|
+
return skip
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def setup(app: Sphinx) -> None:
|
|
67
|
+
app.connect('autodoc-skip-member', skip_abc_methods)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
extensions = [
|
|
71
|
+
'sphinx.ext.autodoc',
|
|
72
|
+
'sphinx.ext.graphviz',
|
|
73
|
+
]
|
|
74
|
+
|
|
75
|
+
autodoc_default_options = {{
|
|
76
|
+
'members': True,
|
|
77
|
+
'private-members': True,
|
|
78
|
+
'special-members': True,
|
|
79
|
+
'inherited-members': False,
|
|
80
|
+
'show-inheritance': True,
|
|
81
|
+
}}
|
|
82
|
+
autodoc_member_order = 'bysource'
|
|
83
|
+
autoclass_content = 'class'
|
|
84
|
+
autodoc_class_signature = 'separated'
|
|
85
|
+
autodoc_typehints_format = 'short'
|
|
86
|
+
autodoc_use_type_comments = True
|
|
87
|
+
autodoc_docstring_signature = False
|
|
88
|
+
autodoc_preserve_defaults = True
|
|
89
|
+
autodoc_warningiserror = False
|
|
90
|
+
|
|
91
|
+
templates_path = ['_templates']
|
|
92
|
+
exclude_patterns: list[str] = []
|
|
93
|
+
|
|
94
|
+
html_theme_options = {{
|
|
95
|
+
'light_css_variables': {{
|
|
96
|
+
'color-link--visited': 'var(--color-link)',
|
|
97
|
+
}},
|
|
98
|
+
'dark_css_variables': {{
|
|
99
|
+
'color-link--visited': 'var(--color-link)',
|
|
100
|
+
}},
|
|
101
|
+
}}
|
|
102
|
+
html_theme = 'furo'
|
|
103
|
+
html_static_path = ['_static']
|
|
104
|
+
html_css_files = ['custom.css']
|
|
105
|
+
|
|
106
|
+
rst_epilog = """
|
|
107
|
+
.. |RELEASE_STRING| replace:: {release_string}
|
|
108
|
+
|
|
109
|
+
"""
|
|
110
|
+
''')
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
Iterables
|
|
2
|
+
=========
|
|
3
|
+
|
|
4
|
+
.. automodule:: pythonic_fp.iterables
|
|
5
|
+
:no-members:
|
|
6
|
+
:ignore-module-all:
|
|
7
|
+
:no-index:
|
|
8
|
+
|
|
9
|
+
.. toctree::
|
|
10
|
+
:caption: Dropping and Taking
|
|
11
|
+
:maxdepth: 1
|
|
12
|
+
|
|
13
|
+
drop_take
|
|
14
|
+
|
|
15
|
+
.. toctree::
|
|
16
|
+
:caption: Merging Iterables
|
|
17
|
+
:maxdepth: 1
|
|
18
|
+
|
|
19
|
+
merging
|
|
20
|
+
|
|
21
|
+
.. toctree::
|
|
22
|
+
:caption: Folding (Reducing)
|
|
23
|
+
:maxdepth: 1
|
|
24
|
+
|
|
25
|
+
folding
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
pythonic-fp-iterables
|
|
2
|
+
=====================
|
|
3
|
+
|
|
4
|
+
Project
|
|
5
|
+
`Pythonic FP - Iterables <https://pypi.org/project/pythonic-fp-iterables/>`_
|
|
6
|
+
one of the
|
|
7
|
+
`Pythonic FP <https://grscheller.github.io/pythonic-fp/>`_
|
|
8
|
+
PyPI projects.
|
|
9
|
+
|
|
10
|
+
|RELEASE_STRING|
|
|
11
|
+
|
|
12
|
+
.. toctree::
|
|
13
|
+
:caption: Overview
|
|
14
|
+
:hidden:
|
|
15
|
+
|
|
16
|
+
self
|
|
17
|
+
|
|
18
|
+
.. toctree::
|
|
19
|
+
:caption: User Documentation
|
|
20
|
+
|
|
21
|
+
description
|
|
22
|
+
usage
|
|
23
|
+
releases
|
|
24
|
+
changelog
|
|
25
|
+
|
|
26
|
+
.. toctree::
|
|
27
|
+
:caption: API Documentation
|
|
28
|
+
:maxdepth: 1
|
|
29
|
+
|
|
30
|
+
api/index
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
PyPI releases
|
|
2
|
+
=============
|
|
3
|
+
|
|
4
|
+
**pythonic-fp-iterables:** pythonic_fp.iterables
|
|
5
|
+
|
|
6
|
+
+---------------------------------------------------------------------------------------+--------------+
|
|
7
|
+
| PyPI Release | Release date |
|
|
8
|
+
+=======================================================================================+==============+
|
|
9
|
+
| `development <https://grscheller.github.io/pythonic-fp-iterables/development/html/>`_ | |
|
|
10
|
+
+---------------------------------------------------------------------------------------+--------------+
|
|
11
|
+
| `v5.1.4 <https://grscheller.github.io/pythonic-fp-iterables/release/html/>`_ | 2026-05-15 |
|
|
12
|
+
+---------------------------------------------------------------------------------------+--------------+
|
|
13
|
+
| v5.1.3 | 2026-01-18 |
|
|
14
|
+
+---------------------------------------------------------------------------------------+--------------+
|
|
15
|
+
| v5.1.2 | 2025-09-26 |
|
|
16
|
+
+---------------------------------------------------------------------------------------+--------------+
|
|
17
|
+
| v5.1.1 | 2025-09-09 |
|
|
18
|
+
+---------------------------------------------------------------------------------------+--------------+
|
|
19
|
+
| v5.1.0 | 2025-09-09 |
|
|
20
|
+
+---------------------------------------------------------------------------------------+--------------+
|
|
21
|
+
| v5.0.0 | 2025-08-02 |
|
|
22
|
+
+---------------------------------------------------------------------------------------+--------------+
|
|
23
|
+
| v4.0.0 | 2025-07-15 |
|
|
24
|
+
+---------------------------------------------------------------------------------------+--------------+
|
|
25
|
+
| v3.0.0 | 2025-07-06 |
|
|
26
|
+
+---------------------------------------------------------------------------------------+--------------+
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
Usage
|
|
2
|
+
=====
|
|
3
|
+
|
|
4
|
+
How to install the package
|
|
5
|
+
--------------------------
|
|
6
|
+
|
|
7
|
+
Install the project into your Python environment:
|
|
8
|
+
|
|
9
|
+
.. code:: console
|
|
10
|
+
|
|
11
|
+
$ pip install pythonic-fp.iterables
|
|
12
|
+
|
|
13
|
+
Importing the package
|
|
14
|
+
---------------------
|
|
15
|
+
|
|
16
|
+
Import the functions and the enum into your code.
|
|
17
|
+
|
|
18
|
+
.. code:: python
|
|
19
|
+
|
|
20
|
+
from pythonic_fp.iterables.merging import concat, merge, exhaust
|
|
21
|
+
from pythonic_fp.iterables.merging import MergeEnum, blend
|
|
22
|
+
|
|
23
|
+
from pythonic_fp.iterables.drop_take import drop, drop_while
|
|
24
|
+
from pythonic_fp.iterables.drop_take import take, take_while
|
|
25
|
+
from pythonic_fp.iterables.drop_take import take_split, take_while_split
|
|
26
|
+
|
|
27
|
+
from pythonic_fp.iterables.folding import accumulate
|
|
28
|
+
from pythonic_fp.iterables.folding import reduce_left
|
|
29
|
+
from pythonic_fp.iterables.folding import fold_left, maybe_fold_left
|
|
30
|
+
from pythonic_fp.iterables.folding import sc_reduce_left, sc_reduce_right
|
|
@@ -1,30 +1,38 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["flit_core>=3.12,<4"]
|
|
3
|
+
build-backend = "flit_core.buildapi"
|
|
4
|
+
|
|
1
5
|
[project]
|
|
2
6
|
name = "pythonic-fp-iterables"
|
|
3
|
-
version = "5.1.
|
|
7
|
+
version = "5.1.4"
|
|
4
8
|
readme = "README.rst"
|
|
5
9
|
requires-python = ">=3.13"
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
10
|
+
authors = [
|
|
11
|
+
{ name = "Geoffrey R. Scheller", email = "geoffrey@scheller.com" },
|
|
12
|
+
]
|
|
13
|
+
keywords = [
|
|
14
|
+
"iterables",
|
|
15
|
+
"iterators",
|
|
16
|
+
]
|
|
9
17
|
classifiers = [
|
|
10
18
|
"Development Status :: 5 - Production/Stable",
|
|
11
19
|
"Framework :: Pytest",
|
|
12
20
|
"Intended Audience :: Developers",
|
|
13
21
|
"License :: OSI Approved :: Apache Software License",
|
|
14
22
|
"Operating System :: OS Independent",
|
|
15
|
-
"Programming Language :: Python :: 3.
|
|
23
|
+
"Programming Language :: Python :: 3.14",
|
|
16
24
|
"Typing :: Typed",
|
|
17
25
|
]
|
|
18
26
|
dependencies = [
|
|
19
|
-
"pythonic-fp-fptools>=5.
|
|
20
|
-
"pythonic-fp-gadgets>=
|
|
27
|
+
"pythonic-fp-fptools>=5.2.0",
|
|
28
|
+
"pythonic-fp-gadgets>=4.0.2",
|
|
21
29
|
]
|
|
22
30
|
dynamic = ["description"]
|
|
23
31
|
|
|
24
32
|
[project.urls]
|
|
25
33
|
Changelog = "https://github.com/grscheller/pythonic-fp-iterables/blob/main/CHANGELOG.rst"
|
|
26
|
-
Documentation = "https://grscheller.github.io/pythonic-fp/iterables
|
|
27
|
-
Homepage = "https://grscheller.github.io/pythonic-fp/
|
|
34
|
+
Documentation = "https://grscheller.github.io/pythonic-fp/projects/iterables.html"
|
|
35
|
+
Homepage = "https://grscheller.github.io/pythonic-fp/"
|
|
28
36
|
Source = "https://github.com/grscheller/pythonic-fp-iterables"
|
|
29
37
|
|
|
30
38
|
[project.optional-dependencies]
|
|
@@ -32,17 +40,11 @@ test = [
|
|
|
32
40
|
"pytest>=8.4.1",
|
|
33
41
|
]
|
|
34
42
|
|
|
35
|
-
[build-system]
|
|
36
|
-
requires = ["flit_core>=3.12,<4"]
|
|
37
|
-
build-backend = "flit_core.buildapi"
|
|
38
|
-
|
|
39
43
|
[tool.flit.module]
|
|
40
44
|
name = "pythonic_fp.iterables"
|
|
41
45
|
|
|
42
46
|
[tool.mypy]
|
|
43
|
-
enable_incomplete_feature = "NewGenericSyntax"
|
|
44
47
|
explicit_package_bases = true
|
|
45
|
-
implicit_reexport = false
|
|
46
48
|
local_partial_types = true
|
|
47
49
|
namespace_packages = true
|
|
48
50
|
warn_redundant_casts = true
|
|
@@ -56,19 +58,24 @@ dmypy = false
|
|
|
56
58
|
strict = true
|
|
57
59
|
report_progress = true
|
|
58
60
|
|
|
59
|
-
[tool.pytest
|
|
60
|
-
addopts =
|
|
61
|
+
[tool.pytest]
|
|
62
|
+
addopts = [
|
|
63
|
+
"-ra",
|
|
64
|
+
]
|
|
61
65
|
consider_namespace_packages = true
|
|
62
66
|
testpaths = ["tests/"]
|
|
63
67
|
|
|
64
68
|
[tool.ruff]
|
|
65
|
-
target-version = "
|
|
69
|
+
target-version = "py314"
|
|
66
70
|
|
|
67
71
|
[tool.ruff.lint.flake8-quotes]
|
|
68
72
|
docstring-quotes = "double"
|
|
69
73
|
|
|
70
74
|
[tool.ruff.lint.per-file-ignores]
|
|
71
|
-
"tests
|
|
75
|
+
"tests/**/*.py" = [
|
|
76
|
+
"E731",
|
|
77
|
+
"C901",
|
|
78
|
+
]
|
|
72
79
|
"**/*.py" = ["E741"]
|
|
73
80
|
|
|
74
81
|
[tool.ruff.format]
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Copyright 2023-2026 Geoffrey R. Scheller
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
"""
|
|
16
|
+
.. admonition:: Composing and iterating iterables
|
|
17
|
+
|
|
18
|
+
- module **merging:** Concatenating and merging iterables.
|
|
19
|
+
- module **drop_take:** Dropping and taking values from iterables.
|
|
20
|
+
- module **folding:** Reducing and accumulating iterables.
|
|
21
|
+
|
|
22
|
+
.. important::
|
|
23
|
+
|
|
24
|
+
**Assumptions:**
|
|
25
|
+
|
|
26
|
+
- iterables are not necessarily iterators
|
|
27
|
+
- at all times iterator protocol is assumed to be followed
|
|
28
|
+
|
|
29
|
+
- all iterators are assumed to be iterable
|
|
30
|
+
- for all iterators ``foobar`` we assume ``iter(foobar) is foobar``
|
|
31
|
+
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
__author__ = 'Geoffrey R. Scheller'
|
|
35
|
+
__copyright__ = 'Copyright (c) 2023-2026 Geoffrey R. Scheller'
|
|
36
|
+
__license__ = 'Apache License 2.0'
|
|
File without changes
|