pythonic-fp-gadgets 4.0.2__tar.gz → 4.0.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.
Files changed (50) hide show
  1. pythonic_fp_gadgets-4.0.4/.github/workflows/static.yml +64 -0
  2. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.4}/.gitignore +2 -0
  3. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.4}/CHANGELOG.rst +22 -2
  4. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.4}/PKG-INFO +13 -11
  5. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.4}/README.rst +7 -5
  6. pythonic_fp_gadgets-4.0.4/docs/Makefile +78 -0
  7. pythonic_fp_gadgets-4.0.4/docs/gen_conf.py +110 -0
  8. pythonic_fp_gadgets-4.0.4/docs/requirements.txt +2 -0
  9. pythonic_fp_gadgets-4.0.4/docs/source/_static/custom.css +3 -0
  10. pythonic_fp_gadgets-4.0.4/docs/source/api/box.rst +6 -0
  11. pythonic_fp_gadgets-4.0.4/docs/source/api/functions/first_common_ancestor.rst +4 -0
  12. pythonic_fp_gadgets-4.0.4/docs/source/api/functions/index.rst +8 -0
  13. pythonic_fp_gadgets-4.0.4/docs/source/api/functions/iterate_over_arguments.rst +4 -0
  14. pythonic_fp_gadgets-4.0.4/docs/source/api/index.rst +31 -0
  15. pythonic_fp_gadgets-4.0.4/docs/source/api/sentinels/flavored.rst +8 -0
  16. pythonic_fp_gadgets-4.0.4/docs/source/api/sentinels/index.rst +14 -0
  17. pythonic_fp_gadgets-4.0.4/docs/source/api/sentinels/novalue.rst +11 -0
  18. pythonic_fp_gadgets-4.0.4/docs/source/api/wrap.rst +6 -0
  19. pythonic_fp_gadgets-4.0.4/docs/source/changelog.rst +7 -0
  20. pythonic_fp_gadgets-4.0.4/docs/source/description.rst +8 -0
  21. pythonic_fp_gadgets-4.0.4/docs/source/index.rst +30 -0
  22. pythonic_fp_gadgets-4.0.4/docs/source/releases.rst +28 -0
  23. pythonic_fp_gadgets-4.0.4/docs/source/usage.rst +160 -0
  24. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.4}/pyproject.toml +22 -19
  25. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.4}/src/pythonic_fp/gadgets/__init__.py +28 -25
  26. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.4}/src/pythonic_fp/gadgets/__init__.pyi +2 -2
  27. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.4}/src/pythonic_fp/gadgets/box.py +97 -34
  28. pythonic_fp_gadgets-4.0.4/src/pythonic_fp/gadgets/py.typed +0 -0
  29. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.4}/src/pythonic_fp/gadgets/sentinels/__init__.py +15 -4
  30. pythonic_fp_gadgets-4.0.4/src/pythonic_fp/gadgets/sentinels/__init__.pyi +0 -0
  31. pythonic_fp_gadgets-4.0.4/src/pythonic_fp/gadgets/sentinels/flavored.py +99 -0
  32. pythonic_fp_gadgets-4.0.4/src/pythonic_fp/gadgets/sentinels/novalue.py +187 -0
  33. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.4}/src/pythonic_fp/gadgets/sentinels/novalue.pyi +2 -0
  34. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.4}/src/pythonic_fp/gadgets/wrap.py +99 -24
  35. pythonic_fp_gadgets-4.0.2/src/pythonic_fp/gadgets/sentinels/flavored.py +0 -74
  36. pythonic_fp_gadgets-4.0.2/src/pythonic_fp/gadgets/sentinels/novalue.py +0 -123
  37. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.4}/LICENSE +0 -0
  38. /pythonic_fp_gadgets-4.0.2/src/pythonic_fp/gadgets/py.typed → /pythonic_fp_gadgets-4.0.4/docs/source/_static/.gitkeep +0 -0
  39. /pythonic_fp_gadgets-4.0.2/src/pythonic_fp/gadgets/sentinels/__init__.pyi → /pythonic_fp_gadgets-4.0.4/docs/source/_templates/.gitkeep +0 -0
  40. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.4}/src/pythonic_fp/gadgets/box.pyi +0 -0
  41. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.4}/src/pythonic_fp/gadgets/sentinels/flavored.pyi +0 -0
  42. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.4}/src/pythonic_fp/gadgets/wrap.pyi +0 -0
  43. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.4}/tests/sentinels/test_novalue.py +0 -0
  44. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.4}/tests/sentinels/test_sentinel_hidden_implemetation_detail.py +0 -0
  45. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.4}/tests/sentinels/test_sentinel_with_functions.py +0 -0
  46. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.4}/tests/test_box.py +0 -0
  47. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.4}/tests/test_first_common_ancestor.py +0 -0
  48. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.4}/tests/test_hwrap.py +0 -0
  49. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.4}/tests/test_iterate_over_arguments.py +0 -0
  50. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.4}/tests/test_wrap.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: '4.0.4'
10
+ DEVEL: '4.0.4'
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: ${{ env.PYTHON }}
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-gadgets
45
+ docs/gen_conf.py release ${{ env.RELEASE }} Gadgets gadgets > 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 }} Gadgets gadgets > 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
@@ -1,6 +1,8 @@
1
1
  # Minimal version - only add to when necessary
2
2
  **/__pycache__/
3
3
  dist/
4
+ docs/build/
5
+ docs/source/conf.py
4
6
  **/.dmypy.json
5
7
  **/.mypy_cache/
6
8
  **/.pytest_cache/
@@ -17,8 +17,28 @@ See `Semantic Versioning 2.0.0 <https://semver.org>`_.
17
17
  Releases and Important Milestones
18
18
  ---------------------------------
19
19
 
20
- PyPI 4.0.2 - 2026-01-TBD
21
- ~~~~~~~~~~~~~~~~~~~~~~~~
20
+ PyPI 4.0.4 - 2026-04-26
21
+ ~~~~~~~~~~~~~~~~~~~~~~~
22
+
23
+ Much docstring work for sentinels. Need to push now going into
24
+ documentation maintenance to fix broken links on PyPI.
25
+
26
+ Development Status Reappraisal - 2026-05-05
27
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
28
+
29
+ Maintainer appraised the Development Status for
30
+ pythonic-fp-gadgets to be ``"3 - Alpha"``.
31
+
32
+ PyPI 4.0.3 - 2026-04-26
33
+ ~~~~~~~~~~~~~~~~~~~~~~~
34
+
35
+ Redoing docs based on circulararray and booleans.
36
+
37
+ - made some innovations which I will back port to the above two.
38
+
39
+
40
+ PyPI 4.0.2 - 2026-01-08
41
+ ~~~~~~~~~~~~~~~~~~~~~~~
22
42
 
23
43
  Docstring improvements based on lessons learned from my PyPI
24
44
  boring-math-abstract-algebra project.
@@ -1,24 +1,24 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pythonic-fp-gadgets
3
- Version: 4.0.2
3
+ Version: 4.0.4
4
4
  Summary: Gadgets
5
5
  Keywords: gadgets
6
6
  Author-email: "Geoffrey R. Scheller" <geoffrey@scheller.com>
7
7
  Requires-Python: >=3.13
8
8
  Description-Content-Type: text/x-rst
9
- Classifier: Development Status :: 4 - Beta
9
+ Classifier: Development Status :: 3 - Alpha
10
10
  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.13
14
+ Classifier: Programming Language :: Python :: 3.14
15
15
  Classifier: Typing :: Typed
16
16
  License-File: LICENSE
17
17
  Requires-Dist: pytest>=8.4.1 ; extra == "test"
18
- Requires-Dist: pythonic-fp-circulararray>=6.0.1 ; extra == "test"
18
+ Requires-Dist: pythonic-fp-circulararray>=6.0.4 ; extra == "test"
19
19
  Project-URL: Changelog, https://github.com/grscheller/pythonic-fp-gadgets/blob/main/CHANGELOG.rst
20
- Project-URL: Documentation, https://grscheller.github.io/pythonic-fp/gadgets/development/build/html/
21
- Project-URL: Homepage, https://grscheller.github.io/pythonic-fp/homepage/build/html/
20
+ Project-URL: Documentation, https://grscheller.github.io/pythonic-fp/projects/gadgets.html
21
+ Project-URL: Homepage, https://grscheller.github.io/pythonic-fp/
22
22
  Project-URL: Source, https://github.com/grscheller/pythonic-fp-gadgets
23
23
  Provides-Extra: test
24
24
 
@@ -27,7 +27,7 @@ Pythonic FP - Gadgets
27
27
 
28
28
  PyPI project
29
29
  `pythonic-fp-gadgets
30
- <https://pypi.org/project/pythonic-fp>`_.
30
+ <https://pypi.org/project/pythonic-fp-gadgets>`_.
31
31
 
32
32
  Library of simple, but useful, classes and functions with no dependencies
33
33
  outside the Python Standard Library.
@@ -35,24 +35,26 @@ outside the Python Standard Library.
35
35
  - Gadgets
36
36
 
37
37
  - single item box
38
+ - immutable wrapped (hashable) references
38
39
  - function returning iterator of its arguments
39
40
  - function to find the latest common ancestor of two classes
41
+ - sentinel values
40
42
 
41
43
  Part of the
42
44
  `pythonic-fp
43
- <https://grscheller.github.io/pythonic-fp>`_
45
+ <https://grscheller.github.io/pythonic-fp/>`_
44
46
  PyPI projects.
45
47
 
46
48
  Documentation
47
49
  -------------
48
50
 
49
- Documentation for this project is hosted on
51
+ Documentation and other links for this project are hosted on
50
52
  `GitHub Pages
51
- <https://grscheller.github.io/pythonic-fp/gadgets>`_.
53
+ <https://grscheller.github.io/pythonic-fp/projects/gadgets.html>`_.
52
54
 
53
55
  Copyright and License
54
56
  ---------------------
55
57
 
56
- Copyright (c) 2025 Geoffrey R. Scheller. Licensed under the Apache
58
+ Copyright (c) 2025-2026 Geoffrey R. Scheller. Licensed under the Apache
57
59
  License, Version 2.0. See the LICENSE file for details.
58
60
 
@@ -3,7 +3,7 @@ Pythonic FP - Gadgets
3
3
 
4
4
  PyPI project
5
5
  `pythonic-fp-gadgets
6
- <https://pypi.org/project/pythonic-fp>`_.
6
+ <https://pypi.org/project/pythonic-fp-gadgets>`_.
7
7
 
8
8
  Library of simple, but useful, classes and functions with no dependencies
9
9
  outside the Python Standard Library.
@@ -11,23 +11,25 @@ outside the Python Standard Library.
11
11
  - Gadgets
12
12
 
13
13
  - single item box
14
+ - immutable wrapped (hashable) references
14
15
  - function returning iterator of its arguments
15
16
  - function to find the latest common ancestor of two classes
17
+ - sentinel values
16
18
 
17
19
  Part of the
18
20
  `pythonic-fp
19
- <https://grscheller.github.io/pythonic-fp>`_
21
+ <https://grscheller.github.io/pythonic-fp/>`_
20
22
  PyPI projects.
21
23
 
22
24
  Documentation
23
25
  -------------
24
26
 
25
- Documentation for this project is hosted on
27
+ Documentation and other links for this project are hosted on
26
28
  `GitHub Pages
27
- <https://grscheller.github.io/pythonic-fp/gadgets>`_.
29
+ <https://grscheller.github.io/pythonic-fp/projects/gadgets.html>`_.
28
30
 
29
31
  Copyright and License
30
32
  ---------------------
31
33
 
32
- Copyright (c) 2025 Geoffrey R. Scheller. Licensed under the Apache
34
+ Copyright (c) 2025-2026 Geoffrey R. Scheller. Licensed under the Apache
33
35
  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 = Gadgets
7
+ PYPI_NAME = gadgets
8
+ RELEASE_VERSION = 4.0.4
9
+ DEVEL_VERSION = 4.0.4
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,2 @@
1
+ sphinx>=9.1
2
+ furo
@@ -0,0 +1,3 @@
1
+ dl.field-list > dt {
2
+ text-transform: none !important;
3
+ }
@@ -0,0 +1,6 @@
1
+ box
2
+ ===
3
+
4
+ .. automodule:: pythonic_fp.gadgets.box
5
+ :members:
6
+ :special-members:
@@ -0,0 +1,4 @@
1
+ First common ancestor
2
+ ---------------------
3
+
4
+ .. autofunction:: pythonic_fp.gadgets.first_common_ancestor
@@ -0,0 +1,8 @@
1
+ functions
2
+ =========
3
+
4
+ .. toctree::
5
+ :caption: Functions
6
+
7
+ first_common_ancestor
8
+ iterate_over_arguments
@@ -0,0 +1,4 @@
1
+ Iterate over arguments
2
+ ----------------------
3
+
4
+ .. autofunction:: pythonic_fp.gadgets.iterate_over_arguments
@@ -0,0 +1,31 @@
1
+ Gadgets
2
+ =======
3
+
4
+ .. automodule:: pythonic_fp.gadgets
5
+ :no-members:
6
+ :ignore-module-all:
7
+ :no-index:
8
+
9
+ .. toctree::
10
+ :caption: functions
11
+ :maxdepth: 1
12
+
13
+ functions/index
14
+
15
+ .. toctree::
16
+ :caption: module box
17
+ :maxdepth: 1
18
+
19
+ box
20
+
21
+ .. toctree::
22
+ :caption: module wrap
23
+ :maxdepth: 1
24
+
25
+ wrap
26
+
27
+ .. toctree::
28
+ :caption: module sentinels
29
+ :maxdepth: 1
30
+
31
+ sentinels/index
@@ -0,0 +1,8 @@
1
+ flavored
2
+ ========
3
+
4
+ **Sentinel values "indexed" by hashable values of a given type.**
5
+
6
+ .. automodule:: pythonic_fp.gadgets.sentinels.flavored
7
+ :members:
8
+ :special-members:
@@ -0,0 +1,14 @@
1
+ sentinels
2
+ =========
3
+
4
+ .. automodule:: pythonic_fp.gadgets.sentinels
5
+ :no-members:
6
+ :ignore-module-all:
7
+ :no-index:
8
+
9
+ .. toctree::
10
+ :caption: Sentinel Values
11
+ :maxdepth: 2
12
+
13
+ novalue
14
+ flavored
@@ -0,0 +1,11 @@
1
+ novalue
2
+ =======
3
+
4
+ .. automodule:: pythonic_fp.gadgets.sentinels.novalue
5
+ :members:
6
+ :special-members:
7
+ :exclude-members: NoValue
8
+
9
+ .. autoclass:: pythonic_fp.gadgets.sentinels.novalue.NoValue
10
+ :members:
11
+ :special-members: __eq__, __ne__
@@ -0,0 +1,6 @@
1
+ wrap
2
+ ====
3
+
4
+ .. automodule:: pythonic_fp.gadgets.wrap
5
+ :members:
6
+ :special-members:
@@ -0,0 +1,7 @@
1
+ Changelog
2
+ =========
3
+
4
+ Changelog for the
5
+ `pythonic-fp-gadgets
6
+ <https://github.com/grscheller/pythonic-fp-gadgets/blob/main/CHANGELOG.rst>`_
7
+ PyPI project.
@@ -0,0 +1,8 @@
1
+ Description
2
+ -----------
3
+
4
+ .. automodule:: pythonic_fp.gadgets
5
+ :no-members:
6
+ :ignore-module-all:
7
+ :no-index:
8
+
@@ -0,0 +1,30 @@
1
+ pythonic-fp-gadgets
2
+ ===================
3
+
4
+ Project
5
+ `Pythonic FP - Gadgets <https://pypi.org/project/pythonic-fp-gadgets/>`_
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,28 @@
1
+ PyPI releases
2
+ =============
3
+
4
+ **pythonic-fp-gadgets:** pythonic_fp.gadgets
5
+
6
+ +-------------------------------------------------------------------------------------+--------------+
7
+ | PyPI Release | Release date |
8
+ +=====================================================================================+==============+
9
+ | `development <https://grscheller.github.io/pythonic-fp-gadgets/development/html/>`_ | |
10
+ +-------------------------------------------------------------------------------------+--------------+
11
+ | `v4.0.4 <https://grscheller.github.io/pythonic-fp-gadgets/release/html/>`_ | 2026-05-12 |
12
+ +-------------------------------------------------------------------------------------+--------------+
13
+ | v4.0.3 | 2026-04-26 |
14
+ +-------------------------------------------------------------------------------------+--------------+
15
+ | v4.0.2 | 2026-01-08 |
16
+ +-------------------------------------------------------------------------------------+--------------+
17
+ | v4.0.1 | 2025-12-02 |
18
+ +-------------------------------------------------------------------------------------+--------------+
19
+ | v3.1.0 | 2025-09-26 |
20
+ +-------------------------------------------------------------------------------------+--------------+
21
+ | v3.0.1 | 2025-09-09 |
22
+ +-------------------------------------------------------------------------------------+--------------+
23
+ | v3.0.0 | 2025-08-31 |
24
+ +-------------------------------------------------------------------------------------+--------------+
25
+ | v2.2.0 | 2025-08-30 |
26
+ +-------------------------------------------------------------------------------------+--------------+
27
+ | v1.1.0 | 2025-08-02 |
28
+ +-------------------------------------------------------------------------------------+--------------+