pythonic-fp-gadgets 4.0.2__tar.gz → 4.0.3__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.3/.github/workflows/static.yml +58 -0
  2. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.3}/.gitignore +4 -0
  3. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.3}/CHANGELOG.rst +10 -2
  4. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.3}/PKG-INFO +11 -9
  5. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.3}/README.rst +6 -4
  6. pythonic_fp_gadgets-4.0.3/docs/Makefile +47 -0
  7. pythonic_fp_gadgets-4.0.3/docs/build/index.html +44 -0
  8. pythonic_fp_gadgets-4.0.3/docs/build/style.css +44 -0
  9. pythonic_fp_gadgets-4.0.3/docs/conf_devel.py +61 -0
  10. pythonic_fp_gadgets-4.0.3/docs/conf_release.py +61 -0
  11. pythonic_fp_gadgets-4.0.3/docs/index_devel.rst +30 -0
  12. pythonic_fp_gadgets-4.0.3/docs/index_release.rst +30 -0
  13. pythonic_fp_gadgets-4.0.3/docs/requirements.txt +2 -0
  14. pythonic_fp_gadgets-4.0.3/docs/source/changelog.rst +7 -0
  15. pythonic_fp_gadgets-4.0.3/docs/source/description.rst +7 -0
  16. pythonic_fp_gadgets-4.0.3/docs/source/docs/box.rst +6 -0
  17. pythonic_fp_gadgets-4.0.3/docs/source/docs/functions/first_common_ancestor.rst +4 -0
  18. pythonic_fp_gadgets-4.0.3/docs/source/docs/functions/index.rst +8 -0
  19. pythonic_fp_gadgets-4.0.3/docs/source/docs/functions/iterate_over_arguments.rst +4 -0
  20. pythonic_fp_gadgets-4.0.3/docs/source/docs/index.rst +31 -0
  21. pythonic_fp_gadgets-4.0.3/docs/source/docs/sentinels/flavored.rst +8 -0
  22. pythonic_fp_gadgets-4.0.3/docs/source/docs/sentinels/index.rst +12 -0
  23. pythonic_fp_gadgets-4.0.3/docs/source/docs/sentinels/novalue.rst +11 -0
  24. pythonic_fp_gadgets-4.0.3/docs/source/docs/wrap.rst +6 -0
  25. pythonic_fp_gadgets-4.0.3/docs/source/releases.rst +24 -0
  26. pythonic_fp_gadgets-4.0.3/docs/source/usage.rst +160 -0
  27. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.3}/pyproject.toml +18 -17
  28. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.3}/src/pythonic_fp/gadgets/__init__.py +16 -13
  29. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.3}/src/pythonic_fp/gadgets/box.py +62 -28
  30. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.3}/src/pythonic_fp/gadgets/sentinels/__init__.py +2 -2
  31. pythonic_fp_gadgets-4.0.3/src/pythonic_fp/gadgets/sentinels/__init__.pyi +0 -0
  32. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.3}/src/pythonic_fp/gadgets/sentinels/flavored.py +17 -9
  33. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.3}/src/pythonic_fp/gadgets/sentinels/novalue.py +8 -3
  34. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.3}/src/pythonic_fp/gadgets/wrap.py +78 -18
  35. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.3}/LICENSE +0 -0
  36. /pythonic_fp_gadgets-4.0.2/src/pythonic_fp/gadgets/py.typed → /pythonic_fp_gadgets-4.0.3/docs/build/.nojekyll +0 -0
  37. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.3}/src/pythonic_fp/gadgets/__init__.pyi +0 -0
  38. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.3}/src/pythonic_fp/gadgets/box.pyi +0 -0
  39. /pythonic_fp_gadgets-4.0.2/src/pythonic_fp/gadgets/sentinels/__init__.pyi → /pythonic_fp_gadgets-4.0.3/src/pythonic_fp/gadgets/py.typed +0 -0
  40. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.3}/src/pythonic_fp/gadgets/sentinels/flavored.pyi +0 -0
  41. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.3}/src/pythonic_fp/gadgets/sentinels/novalue.pyi +0 -0
  42. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.3}/src/pythonic_fp/gadgets/wrap.pyi +0 -0
  43. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.3}/tests/sentinels/test_novalue.py +0 -0
  44. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.3}/tests/sentinels/test_sentinel_hidden_implemetation_detail.py +0 -0
  45. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.3}/tests/sentinels/test_sentinel_with_functions.py +0 -0
  46. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.3}/tests/test_box.py +0 -0
  47. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.3}/tests/test_first_common_ancestor.py +0 -0
  48. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.3}/tests/test_hwrap.py +0 -0
  49. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.3}/tests/test_iterate_over_arguments.py +0 -0
  50. {pythonic_fp_gadgets-4.0.2 → pythonic_fp_gadgets-4.0.3}/tests/test_wrap.py +0 -0
@@ -0,0 +1,58 @@
1
+ name: Build and Deploy Furo Themed Sphinx Documentation
2
+
3
+ on:
4
+ push:
5
+ branches: ["main"]
6
+ workflow_dispatch:
7
+
8
+ permissions:
9
+ contents: read
10
+ pages: write
11
+ id-token: write
12
+
13
+ concurrency:
14
+ group: "pages"
15
+ cancel-in-progress: false
16
+
17
+ jobs:
18
+ deploy:
19
+ runs-on: ubuntu-latest
20
+ steps:
21
+ - name: Checkout
22
+ uses: actions/checkout@v6
23
+
24
+ - name: Select Python
25
+ uses: actions/setup-python@v6
26
+ with:
27
+ python-version: '3.14'
28
+
29
+ - name: Install Sphinx Dependencies
30
+ run: |
31
+ pip install -r docs/requirements.txt
32
+ sudo apt-get install -y graphviz
33
+
34
+ - name: Build Release Docs
35
+ run: |
36
+ pip install pythonic-fp-gadgets
37
+ cp docs/index_release.rst docs/source/index.rst
38
+ cp docs/conf_release.py docs/source/conf.py
39
+ sphinx-build -M html docs/source docs/build/release
40
+
41
+ - name: Build Development Docs
42
+ run: |
43
+ pip install -e .
44
+ cp docs/index_devel.rst docs/source/index.rst
45
+ cp docs/conf_devel.py docs/source/conf.py
46
+ sphinx-build -M html docs/source docs/build/development
47
+
48
+ - name: Setup Pages
49
+ uses: actions/configure-pages@v6
50
+
51
+ - name: Upload Artifact
52
+ uses: actions/upload-pages-artifact@v5
53
+ with:
54
+ path: docs/build
55
+
56
+ - name: Deploy to GitHub Pages
57
+ uses: actions/deploy-pages@v5
58
+ id: deployment
@@ -1,6 +1,10 @@
1
1
  # Minimal version - only add to when necessary
2
2
  **/__pycache__/
3
3
  dist/
4
+ docs/build/release/
5
+ docs/build/development/
6
+ docs/source/conf.py
7
+ docs/source/index.rst
4
8
  **/.dmypy.json
5
9
  **/.mypy_cache/
6
10
  **/.pytest_cache/
@@ -17,8 +17,16 @@ 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.3 - 2026-04-26
21
+ ~~~~~~~~~~~~~~~~~~~~~~~
22
+
23
+ Redoing docs based on circulararray and booleans.
24
+
25
+ - made some innovations which I will back port to the above two.
26
+
27
+
28
+ PyPI 4.0.2 - 2026-01-08
29
+ ~~~~~~~~~~~~~~~~~~~~~~~
22
30
 
23
31
  Docstring improvements based on lessons learned from my PyPI
24
32
  boring-math-abstract-algebra project.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pythonic-fp-gadgets
3
- Version: 4.0.2
3
+ Version: 4.0.3
4
4
  Summary: Gadgets
5
5
  Keywords: gadgets
6
6
  Author-email: "Geoffrey R. Scheller" <geoffrey@scheller.com>
@@ -11,14 +11,14 @@ 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-gadgets/
21
+ Project-URL: Homepage, https://grscheller.github.io/pythonic-fp/homepage/html/
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,12 +35,14 @@ outside the Python Standard Library.
35
35
  - Gadgets
36
36
 
37
37
  - single item box
38
+ - 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/homepage/html/>`_
44
46
  PyPI projects.
45
47
 
46
48
  Documentation
@@ -48,11 +50,11 @@ Documentation
48
50
 
49
51
  Documentation for this project is hosted on
50
52
  `GitHub Pages
51
- <https://grscheller.github.io/pythonic-fp/gadgets>`_.
53
+ <https://grscheller.github.io/pythonic-fp-gadgets>`_.
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,12 +11,14 @@ outside the Python Standard Library.
11
11
  - Gadgets
12
12
 
13
13
  - single item box
14
+ - 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/homepage/html/>`_
20
22
  PyPI projects.
21
23
 
22
24
  Documentation
@@ -24,10 +26,10 @@ Documentation
24
26
 
25
27
  Documentation for this project is hosted on
26
28
  `GitHub Pages
27
- <https://grscheller.github.io/pythonic-fp/gadgets>`_.
29
+ <https://grscheller.github.io/pythonic-fp-gadgets>`_.
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,47 @@
1
+ # Makefile for Sphinx documentation
2
+ #
3
+ # Important Note: "make devel" and "make release" will just
4
+ # use the first pythonic_fp.circulararray package found.
5
+
6
+ # You can set these variables from the command line, and also
7
+ # from the environment for the first two.
8
+ SPHINXOPTS ?=
9
+ SPHINXBUILD ?= sphinx-build
10
+ SOURCEDIR = source
11
+ BUILDDIR = build
12
+
13
+ STATICDIR = source/_static
14
+ TEMPLATEDIR = source/_templates
15
+
16
+ # Put it first so that "make" without argument is like "make help".
17
+ help:
18
+ @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS)
19
+
20
+ Makefile:
21
+ mkdir -p $(STATICDIR) $(TEMPLATEDIR)
22
+
23
+ # Build development labeled html docs.
24
+ devel: Makefile
25
+ rm -rf "$(BUILDDIR)"/development
26
+ rm -f "$(SOURCEDIR)"/index.rst "$(SOURCEDIR)"/conf.py
27
+ cp index_devel.rst "$(SOURCEDIR)"/index.rst
28
+ cp conf_devel.py "$(SOURCEDIR)"/conf.py
29
+ @$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)"/development $(SPHINXOPTS)
30
+
31
+ # Build release labeled html docs.
32
+ release: Makefile
33
+ rm -rf "$(BUILDDIR)"/release
34
+ rm -f "$(SOURCEDIR)"/index.rst "$(SOURCEDIR)"/conf.py
35
+ cp index_release.rst "$(SOURCEDIR)"/index.rst
36
+ cp conf_release.py "$(SOURCEDIR)"/conf.py
37
+ @$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)"/release $(SPHINXOPTS)
38
+
39
+ .PHONY: help Makefile devel release
40
+
41
+ # Catch-all target: route all unknown targets to Sphinx, build development docs
42
+ %: Makefile
43
+ rm -rf "$(BUILDDIR)"/development
44
+ rm -f "$(SOURCEDIR)"/index.rst "$(SOURCEDIR)"/conf.py
45
+ cp index_devel.rst "$(SOURCEDIR)"/index.rst
46
+ cp conf_devel.py "$(SOURCEDIR)"/conf.py
47
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)"/development $(SPHINXOPTS)
@@ -0,0 +1,44 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="UTF-8" />
6
+ <title>PyPI Project: pythonic-fp-gadgets</title>
7
+ <link rel="stylesheet" href="style.css" />
8
+ </head>
9
+
10
+ <body>
11
+ <table>
12
+ <tr>
13
+ <td>
14
+ <h3>Pythonic FP Gadgets</h3>
15
+ <dl>
16
+ <dt>Gadgets - pythonic-fp-gadgets:</dt>
17
+ <dd><a href="https://pypi.org/project/pythonic-fp-gadgets/"> PyPI</a></dd>
18
+ <dd><a href="https://github.com/grscheller/pythonic-fp-gadgets"> GitHub</a></dd>
19
+ </dl>
20
+
21
+ <dl>
22
+ <dt>Gadgets Documentation:</dt>
23
+ <dd><a href="https://grscheller.github.io/pythonic-fp-gadgets/release/html/"> Latest release</a></dd>
24
+ <dd><a href="https://grscheller.github.io/pythonic-fp-gadgets/development/html/"> Development</a></dd>
25
+ </dl>
26
+ </td>
27
+
28
+ <td>
29
+ <h3>Related PyPI Projects</h3>
30
+ <dl>
31
+ <dt>Pythonic Functional Programming:</dt>
32
+ <dd><a href="https://grscheller.github.io/pythonic-fp/"> Pythonic FP Homepage</a></dd>
33
+ </dl>
34
+
35
+ <dl>
36
+ <dt>Daddy's Boring Math Library :</dt>
37
+ <dd><a href="https://grscheller.github.io/boring-math/"> Boring Math Homepage</a></dd>
38
+ </dl>
39
+ </td>
40
+ </tr>
41
+ </table>
42
+ </body>
43
+
44
+ </html>
@@ -0,0 +1,44 @@
1
+ body {
2
+ color: #c5c9c5;
3
+ background-color: #181616;
4
+ font-family: cantarell,liberation,arial,helvetica,sans-serif
5
+ }
6
+
7
+ a:link {
8
+ color: #6884c0;
9
+ text-decoration: none;
10
+ }
11
+
12
+ a:visited {
13
+ color: #7e9cd8;
14
+ text-decoration: none;
15
+ }
16
+
17
+ a:hover {
18
+ text-decoration: underline;
19
+ }
20
+
21
+ h3 {
22
+ color: #b6927b;
23
+ margin-left: 20px;
24
+ }
25
+
26
+ table {
27
+ width: 100%;
28
+ }
29
+
30
+ td {
31
+ vertical-align: top;
32
+ }
33
+
34
+ dt {
35
+ color: #acafac;
36
+ margin-left: 20px;
37
+ margin-top: 5px;
38
+ }
39
+
40
+ dd {
41
+ color: #c5c9c5;
42
+ margin-left: 20px;
43
+ padding-left: 15px;
44
+ }
@@ -0,0 +1,61 @@
1
+ # Configuration file for the Sphinx documentation builder.
2
+ #
3
+ # https://www.sphinx-doc.org/en/master/usage/index.html
4
+ #
5
+ # Must match what is in pyproject.toml, also delete "Proposed"
6
+ # in the release string in source/index.rst when generating
7
+ # the docs for an actual, not proposed, release.
8
+
9
+ from typing import Any
10
+ from sphinx.application import Sphinx
11
+
12
+ project = 'Pythonic FP - Gadgets'
13
+ copyright = '2023-2026, Geoffrey R. Scheller'
14
+ author = 'Geoffrey R. Scheller'
15
+ release = '4.0.3'
16
+
17
+
18
+ def skip_abc_methods(
19
+ app: Any, what: str, name: str, obj: Any, skip: bool, options: Any
20
+ ) -> bool:
21
+ if name in [
22
+ '__init_subclass__',
23
+ '__subclasshook__',
24
+ '__class_getitem__',
25
+ '__weakref__',
26
+ ]:
27
+ return True # Skip these members
28
+ return skip
29
+
30
+
31
+ def setup(app: Sphinx) -> None:
32
+ app.connect('autodoc-skip-member', skip_abc_methods)
33
+
34
+
35
+ extensions = [
36
+ 'sphinx.ext.autodoc',
37
+ 'sphinx.ext.graphviz',
38
+ ]
39
+
40
+ autodoc_member_order = 'bysource'
41
+ autoclass_content = 'class'
42
+ autodoc_class_signature = 'separated'
43
+ autodoc_typehints_format = 'short'
44
+ autodoc_use_type_comments = True
45
+ autodoc_docstring_signature = False
46
+ autodoc_preserve_defaults = True
47
+ autodoc_warningiserror = False
48
+
49
+ templates_path = ['_templates']
50
+ exclude_patterns: list[str] = []
51
+
52
+ html_theme_options = {
53
+ 'light_css_variables': {
54
+ 'color-link--visited': 'var(--color-link)',
55
+ },
56
+ 'dark_css_variables': {
57
+ 'color-link--visited': 'var(--color-link)',
58
+ },
59
+ }
60
+ html_theme = 'furo'
61
+ html_static_path = ['_static']
@@ -0,0 +1,61 @@
1
+ # Configuration file for the Sphinx documentation builder.
2
+ #
3
+ # https://www.sphinx-doc.org/en/master/usage/index.html
4
+ #
5
+ # Must match what is in pyproject.toml, also delete "Proposed"
6
+ # in the release string in source/index.rst when generating
7
+ # the docs for an actual, not proposed, release.
8
+
9
+ from typing import Any
10
+ from sphinx.application import Sphinx
11
+
12
+ project = 'Pythonic FP - Gadgets'
13
+ copyright = '2023-2026, Geoffrey R. Scheller'
14
+ author = 'Geoffrey R. Scheller'
15
+ release = '4.0.2'
16
+
17
+
18
+ def skip_abc_methods(
19
+ app: Any, what: str, name: str, obj: Any, skip: bool, options: Any
20
+ ) -> bool:
21
+ if name in [
22
+ '__init_subclass__',
23
+ '__subclasshook__',
24
+ '__class_getitem__',
25
+ '__weakref__',
26
+ ]:
27
+ return True # Skip these members
28
+ return skip
29
+
30
+
31
+ def setup(app: Sphinx) -> None:
32
+ app.connect('autodoc-skip-member', skip_abc_methods)
33
+
34
+
35
+ extensions = [
36
+ 'sphinx.ext.autodoc',
37
+ 'sphinx.ext.graphviz',
38
+ ]
39
+
40
+ autodoc_member_order = 'bysource'
41
+ autoclass_content = 'class'
42
+ autodoc_class_signature = 'separated'
43
+ autodoc_typehints_format = 'short'
44
+ autodoc_use_type_comments = True
45
+ autodoc_docstring_signature = False
46
+ autodoc_preserve_defaults = True
47
+ autodoc_warningiserror = False
48
+
49
+ templates_path = ['_templates']
50
+ exclude_patterns: list[str] = []
51
+
52
+ html_theme_options = {
53
+ 'light_css_variables': {
54
+ 'color-link--visited': 'var(--color-link)',
55
+ },
56
+ 'dark_css_variables': {
57
+ 'color-link--visited': 'var(--color-link)',
58
+ },
59
+ }
60
+ html_theme = 'furo'
61
+ html_static_path = ['_static']
@@ -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
+ **Proposed PyPI 4.0.3 release**
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
+ docs/index
@@ -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
+ **PyPI 4.0.2 release**
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
+ docs/index
@@ -0,0 +1,2 @@
1
+ sphinx>=9.1
2
+ furo
@@ -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,7 @@
1
+ Description
2
+ -----------
3
+
4
+ .. automodule:: pythonic_fp.gadgets
5
+ :synopsis:
6
+ :noindex:
7
+
@@ -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,12 @@
1
+ sentinels
2
+ =========
3
+
4
+ .. automodule:: pythonic_fp.gadgets.sentinels
5
+ :synopsis:
6
+
7
+ .. toctree::
8
+ :caption: Sentinel Values
9
+
10
+ novalue
11
+ flavored
12
+
@@ -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,24 @@
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.2 <https://grscheller.github.io/pythonic-fp-gadgets/release/html/>`_ | 2026-01-08 |
12
+ +-------------------------------------------------------------------------------------+--------------+
13
+ | v4.0.1 | 2025-12-02 |
14
+ +-------------------------------------------------------------------------------------+--------------+
15
+ | v3.1.0 | 2025-09-26 |
16
+ +-------------------------------------------------------------------------------------+--------------+
17
+ | v3.0.1 | 2025-09-09 |
18
+ +-------------------------------------------------------------------------------------+--------------+
19
+ | v3.0.0 | 2025-08-31 |
20
+ +-------------------------------------------------------------------------------------+--------------+
21
+ | v2.2.0 | 2025-08-30 |
22
+ +-------------------------------------------------------------------------------------+--------------+
23
+ | v1.1.0 | 2025-08-02 |
24
+ +-------------------------------------------------------------------------------------+--------------+