free_groups_26 1.2.0__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 (60) hide show
  1. free_groups_26-1.2.0/.github/workflows/pytest.yml +42 -0
  2. free_groups_26-1.2.0/.github/workflows/sphinx.yml +37 -0
  3. free_groups_26-1.2.0/.gitignore +29 -0
  4. free_groups_26-1.2.0/.ipynb_checkpoints/Untitled-checkpoint.ipynb +6 -0
  5. free_groups_26-1.2.0/LICENSE +21 -0
  6. free_groups_26-1.2.0/PKG-INFO +31 -0
  7. free_groups_26-1.2.0/README.md +8 -0
  8. free_groups_26-1.2.0/devenv.lock +65 -0
  9. free_groups_26-1.2.0/devenv.nix +85 -0
  10. free_groups_26-1.2.0/devenv.yaml +18 -0
  11. free_groups_26-1.2.0/docs/Makefile +26 -0
  12. free_groups_26-1.2.0/docs/make.bat +35 -0
  13. free_groups_26-1.2.0/docs/requirements.txt +3 -0
  14. free_groups_26-1.2.0/docs/source/_static/logo.svg +1 -0
  15. free_groups_26-1.2.0/docs/source/api.rst +14 -0
  16. free_groups_26-1.2.0/docs/source/classes/classes.rst +11 -0
  17. free_groups_26-1.2.0/docs/source/classes/free_group.rst +14 -0
  18. free_groups_26-1.2.0/docs/source/classes/letter.rst +17 -0
  19. free_groups_26-1.2.0/docs/source/classes/log.rst +20 -0
  20. free_groups_26-1.2.0/docs/source/classes/morphism.rst +15 -0
  21. free_groups_26-1.2.0/docs/source/classes/whitehead_graph.rst +19 -0
  22. free_groups_26-1.2.0/docs/source/classes/word.rst +14 -0
  23. free_groups_26-1.2.0/docs/source/conf.py +42 -0
  24. free_groups_26-1.2.0/docs/source/functionality/bruteforce.rst +16 -0
  25. free_groups_26-1.2.0/docs/source/functionality/bruteforce_orbit.rst +12 -0
  26. free_groups_26-1.2.0/docs/source/functionality/free_group.rst +12 -0
  27. free_groups_26-1.2.0/docs/source/functionality/functions.rst +13 -0
  28. free_groups_26-1.2.0/docs/source/functionality/letter.rst +16 -0
  29. free_groups_26-1.2.0/docs/source/functionality/whitehead_automorphism.rst +17 -0
  30. free_groups_26-1.2.0/docs/source/functionality/whitehead_graph.rst +16 -0
  31. free_groups_26-1.2.0/docs/source/functionality/whitehead_minimization.rst +18 -0
  32. free_groups_26-1.2.0/docs/source/functionality/word.rst +24 -0
  33. free_groups_26-1.2.0/docs/source/generated/free_groups_26.aut_orbit_bruteforce.rst +12 -0
  34. free_groups_26-1.2.0/docs/source/generated/free_groups_26.free_group.rst +18 -0
  35. free_groups_26-1.2.0/docs/source/generated/free_groups_26.letter.rst +20 -0
  36. free_groups_26-1.2.0/docs/source/generated/free_groups_26.morphism.rst +12 -0
  37. free_groups_26-1.2.0/docs/source/generated/free_groups_26.whitehead_automorphism.rst +14 -0
  38. free_groups_26-1.2.0/docs/source/generated/free_groups_26.whitehead_graph.rst +14 -0
  39. free_groups_26-1.2.0/docs/source/generated/free_groups_26.whitehead_minimization.rst +15 -0
  40. free_groups_26-1.2.0/docs/source/generated/free_groups_26.word.rst +6 -0
  41. free_groups_26-1.2.0/docs/source/index.rst +47 -0
  42. free_groups_26-1.2.0/pyproject.toml +42 -0
  43. free_groups_26-1.2.0/src/.ipynb_checkpoints/Untitled-checkpoint.ipynb +6 -0
  44. free_groups_26-1.2.0/src/Untitled.ipynb +6 -0
  45. free_groups_26-1.2.0/src/free_groups_26/__init__.py +44 -0
  46. free_groups_26-1.2.0/src/free_groups_26/aut_orbit_bruteforce.py +16 -0
  47. free_groups_26-1.2.0/src/free_groups_26/free_group.py +49 -0
  48. free_groups_26-1.2.0/src/free_groups_26/letter.py +146 -0
  49. free_groups_26-1.2.0/src/free_groups_26/log.py +44 -0
  50. free_groups_26-1.2.0/src/free_groups_26/minimize_bruteforce.py +88 -0
  51. free_groups_26-1.2.0/src/free_groups_26/morphism.py +58 -0
  52. free_groups_26-1.2.0/src/free_groups_26/whitehead_automorphism.py +92 -0
  53. free_groups_26-1.2.0/src/free_groups_26/whitehead_graph.py +56 -0
  54. free_groups_26-1.2.0/src/free_groups_26/whitehead_minimization.py +120 -0
  55. free_groups_26-1.2.0/src/free_groups_26/word/__init__.py +21 -0
  56. free_groups_26-1.2.0/src/free_groups_26/word/defn.py +163 -0
  57. free_groups_26-1.2.0/src/free_groups_26/word/functions.py +84 -0
  58. free_groups_26-1.2.0/tests/test_letter.py +31 -0
  59. free_groups_26-1.2.0/tests/test_reduction.py +11 -0
  60. free_groups_26-1.2.0/tests/test_word_class.py +13 -0
@@ -0,0 +1,42 @@
1
+ name: Run Pytest
2
+
3
+ on:
4
+ push:
5
+ branches: [ "main", "refactor-word"]
6
+ pull_request:
7
+ branches: [ "main" ]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+ strategy:
13
+ matrix:
14
+ python-version: ["3.13", "3.14"]
15
+
16
+ steps:
17
+ - name: Checkout repository
18
+ uses: actions/checkout@v4
19
+
20
+ - name: Set up Python ${{ matrix.python-version }}
21
+ uses: actions/setup-python@v5
22
+ with:
23
+ python-version: ${{ matrix.python-version }}
24
+ cache: 'pip'
25
+
26
+ - name: Install dependencies
27
+ run: |
28
+ python -m pip install --upgrade pip
29
+ pip install -e .[test]
30
+
31
+ - name: Run tests with pytest
32
+ run: |
33
+ pytest
34
+
35
+ - name: Upload test results
36
+ if: always()
37
+ uses: actions/upload-artifact@v4
38
+ with:
39
+ name: pytest-results-${{ matrix.python-version }}
40
+ path: |
41
+ junit/test-results-${{ matrix.python-version }}.xml
42
+ coverage.xml
@@ -0,0 +1,37 @@
1
+ name: "Sphinx: Render docs"
2
+
3
+ on: push
4
+
5
+ jobs:
6
+ build:
7
+ runs-on: ubuntu-latest
8
+ permissions:
9
+ contents: write
10
+ steps:
11
+ - uses: actions/checkout@v4
12
+ with:
13
+ persist-credentials: false
14
+ - uses: actions/setup-python@v5
15
+ with:
16
+ python-version: "3.13"
17
+ - name: Install dependencies
18
+ run: |
19
+ python -m pip install --upgrade pip
20
+ pip install -r docs/requirements.txt
21
+ pip install -e .
22
+ - name: Build HTML
23
+ run: |
24
+ cd docs
25
+ make html
26
+ cd -
27
+ - name: Upload artifacts
28
+ uses: actions/upload-artifact@v4
29
+ with:
30
+ name: html-docs
31
+ path: docs/build/html/
32
+ - name: Deploy
33
+ uses: peaceiris/actions-gh-pages@v3
34
+ if: github.ref == 'refs/heads/main'
35
+ with:
36
+ github_token: ${{ secrets.GITHUB_TOKEN }}
37
+ publish_dir: docs/build/html
@@ -0,0 +1,29 @@
1
+ # Devenv
2
+ .devenv*
3
+ devenv.local.nix
4
+ devenv.local.yaml
5
+
6
+ # direnv
7
+ .direnv
8
+
9
+ # environment
10
+ .envrc
11
+ .env
12
+
13
+ # pre-commit
14
+ .pre-commit-config.yaml
15
+
16
+ # builds
17
+ dist
18
+
19
+ # testing
20
+ *__pycache__
21
+ .pytest_cache
22
+ jupyter_test
23
+ temp
24
+
25
+ # documentation
26
+ docs/build
27
+
28
+ # generated typings
29
+ typings/sortedcontainers
@@ -0,0 +1,6 @@
1
+ {
2
+ "cells": [],
3
+ "metadata": {},
4
+ "nbformat": 4,
5
+ "nbformat_minor": 5
6
+ }
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Sudhir Krisna
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,31 @@
1
+ Metadata-Version: 2.5
2
+ Name: free_groups_26
3
+ Version: 1.2.0
4
+ Summary: A Python Module for working with Free Groups
5
+ Project-URL: Documentation, https://www.sudhirkrisna.com/free_groups_26/
6
+ Project-URL: Repository, https://github.com/Sudhboi/free_groups_26
7
+ Project-URL: Issues, https://github.com/Sudhboi/free_groups_26/issues
8
+ Author-email: Sudhir Krisna <sudhcontent@gmail.com>
9
+ License-Expression: MIT
10
+ License-File: LICENSE
11
+ Classifier: Operating System :: OS Independent
12
+ Classifier: Programming Language :: Python :: 3
13
+ Requires-Python: >=3.13
14
+ Requires-Dist: matplotlib>=3.10.8
15
+ Requires-Dist: networkx>=3.6.1
16
+ Requires-Dist: sortedcontainers>=2.4.0
17
+ Provides-Extra: docs
18
+ Requires-Dist: sphinx; extra == 'docs'
19
+ Provides-Extra: test
20
+ Requires-Dist: pytest; extra == 'test'
21
+ Requires-Dist: pytest-cov; extra == 'test'
22
+ Description-Content-Type: text/markdown
23
+
24
+ # free_groups_26
25
+
26
+ ### Install:
27
+ ```
28
+ pip install free-groups-26
29
+ ```
30
+
31
+ Documentation can be found at the official website - [free_groups_26](https://www.sudhirkrisna.com/free_groups_26/index.html)
@@ -0,0 +1,8 @@
1
+ # free_groups_26
2
+
3
+ ### Install:
4
+ ```
5
+ pip install free-groups-26
6
+ ```
7
+
8
+ Documentation can be found at the official website - [free_groups_26](https://www.sudhirkrisna.com/free_groups_26/index.html)
@@ -0,0 +1,65 @@
1
+ {
2
+ "nodes": {
3
+ "devenv": {
4
+ "locked": {
5
+ "dir": "src/modules",
6
+ "lastModified": 1789691577,
7
+ "narHash": "sha256-mS9lQo1gpKzwWMYgzdxc4yv4sIdwqI0GfFMCbV4LZtA=",
8
+ "owner": "cachix",
9
+ "repo": "devenv",
10
+ "rev": "ccb4a99d35474afd07634ee194174ae40f7d98af",
11
+ "type": "github"
12
+ },
13
+ "original": {
14
+ "dir": "src/modules",
15
+ "owner": "cachix",
16
+ "repo": "devenv",
17
+ "type": "github"
18
+ }
19
+ },
20
+ "nixpkgs": {
21
+ "inputs": {
22
+ "nixpkgs-src": "nixpkgs-src"
23
+ },
24
+ "locked": {
25
+ "lastModified": 1789506231,
26
+ "narHash": "sha256-vNkJbtmqyBfFhn/HnzQo4ROuoyYWuy/allqTfJb4kMY=",
27
+ "owner": "cachix",
28
+ "repo": "devenv-nixpkgs",
29
+ "rev": "c2f38fe7f9e04d9aadd354d380f2bd40531d9737",
30
+ "type": "github"
31
+ },
32
+ "original": {
33
+ "owner": "cachix",
34
+ "ref": "rolling",
35
+ "repo": "devenv-nixpkgs",
36
+ "type": "github"
37
+ }
38
+ },
39
+ "nixpkgs-src": {
40
+ "flake": false,
41
+ "locked": {
42
+ "lastModified": 1789370336,
43
+ "narHash": "sha256-6RSEDHIWQtesQKWSu5qRai8L2h4KgCgMEfJHstW99G4=",
44
+ "owner": "NixOS",
45
+ "repo": "nixpkgs",
46
+ "rev": "c7def046b9a883d46974757852106483d741586f",
47
+ "type": "github"
48
+ },
49
+ "original": {
50
+ "owner": "NixOS",
51
+ "ref": "nixpkgs-unstable",
52
+ "repo": "nixpkgs",
53
+ "type": "github"
54
+ }
55
+ },
56
+ "root": {
57
+ "inputs": {
58
+ "devenv": "devenv",
59
+ "nixpkgs": "nixpkgs"
60
+ }
61
+ }
62
+ },
63
+ "root": "root",
64
+ "version": 7
65
+ }
@@ -0,0 +1,85 @@
1
+ { pkgs, ... }:
2
+
3
+ {
4
+ # https://devenv.sh/basics/
5
+ env.GREET = "devenv";
6
+
7
+ # https://devenv.sh/packages/
8
+ packages = with pkgs; [
9
+ (python3.withPackages (
10
+ ps: with ps; [
11
+ numpy
12
+ networkx
13
+ matplotlib
14
+ scipy
15
+ sortedcontainers
16
+
17
+ # Distribution
18
+ build
19
+ twine
20
+ uv
21
+
22
+ # Documentation
23
+ sphinx
24
+ sphinx-autobuild
25
+ furo
26
+
27
+ # Testing
28
+ pytest
29
+ jupyter
30
+ jupyterlab-vim
31
+ jupyterlab-lsp
32
+ jupyter-client
33
+ ]
34
+ ))
35
+ black
36
+ python3
37
+ basedpyright
38
+ ];
39
+
40
+ scripts.publish.exec = ''
41
+ uv build && uv publish
42
+ '';
43
+
44
+ scripts.tests.exec = ''
45
+ python3 -m pytest
46
+ '';
47
+
48
+ scripts.build_website.exec = ''
49
+ cd $DEVENV_ROOT/docs
50
+ make html
51
+ cd -
52
+ '';
53
+
54
+ scripts.doctests.exec = ''
55
+ cd $DEVENV_ROOT/docs
56
+ make doctest
57
+ cd -
58
+ '';
59
+
60
+ scripts.site.exec = ''
61
+ xdg-open $DEVENV_ROOT/docs/build/html/index.html
62
+ '';
63
+
64
+ scripts.live.exec = ''
65
+ cd $DEVENV_ROOT/docs
66
+ make livehtml
67
+ cd -
68
+ '';
69
+
70
+ scripts.format.exec = ''
71
+ cd $DEVENV_ROOT
72
+ black ./src
73
+ cd -
74
+ '';
75
+
76
+ enterShell = ''
77
+ export PYTHONPATH="$DEVENV_ROOT/src/:$PYTHONPATH"
78
+ '';
79
+
80
+ enterTest = ''
81
+ echo "Running tests"
82
+ git --version | grep --color=auto "${pkgs.git.version}"
83
+ '';
84
+
85
+ }
@@ -0,0 +1,18 @@
1
+ # yaml-language-server: $schema=https://devenv.sh/devenv.schema.json
2
+ inputs:
3
+ nixpkgs:
4
+ url: github:cachix/devenv-nixpkgs/rolling
5
+
6
+ # If you're using non-OSS software, you can set allowUnfree to true.
7
+ # allowUnfree: true
8
+
9
+ # If you're not willing to allow unsupported packages:
10
+ # allowUnsupportedSystem: false
11
+
12
+ # If you're willing to use a package that's vulnerable
13
+ # permittedInsecurePackages:
14
+ # - "openssl-1.1.1w"
15
+
16
+ # If you have more than one devenv you can merge them
17
+ #imports:
18
+ # - ./backend
@@ -0,0 +1,26 @@
1
+ # Minimal makefile for Sphinx documentation
2
+ #
3
+
4
+ # You can set these variables from the command line, and also
5
+ # from the environment for the first two.
6
+ SPHINXOPTS ?=
7
+ SPHINXBUILD ?= sphinx-build
8
+ SOURCEDIR = source
9
+ BUILDDIR = build
10
+
11
+ # Put it first so that "make" without argument is like "make help".
12
+ help:
13
+ @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
14
+
15
+ .PHONY: help Makefile
16
+
17
+ # Catch-all target: route all unknown targets to Sphinx using the new
18
+ # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
19
+
20
+ livehtml:
21
+ sphinx-autobuild "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
22
+
23
+ %: Makefile
24
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
25
+
26
+
@@ -0,0 +1,35 @@
1
+ @ECHO OFF
2
+
3
+ pushd %~dp0
4
+
5
+ REM Command file for Sphinx documentation
6
+
7
+ if "%SPHINXBUILD%" == "" (
8
+ set SPHINXBUILD=sphinx-build
9
+ )
10
+ set SOURCEDIR=source
11
+ set BUILDDIR=build
12
+
13
+ %SPHINXBUILD% >NUL 2>NUL
14
+ if errorlevel 9009 (
15
+ echo.
16
+ echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
17
+ echo.installed, then set the SPHINXBUILD environment variable to point
18
+ echo.to the full path of the 'sphinx-build' executable. Alternatively you
19
+ echo.may add the Sphinx directory to PATH.
20
+ echo.
21
+ echo.If you don't have Sphinx installed, grab it from
22
+ echo.https://www.sphinx-doc.org/
23
+ exit /b 1
24
+ )
25
+
26
+ if "%1" == "" goto help
27
+
28
+ %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
29
+ goto end
30
+
31
+ :help
32
+ %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
33
+
34
+ :end
35
+ popd
@@ -0,0 +1,3 @@
1
+ sphinx==9.1.0
2
+ furo==2025.12.19
3
+
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 200 200"><rect width="200" height="200" fill="url('#gradient')"></rect><defs><linearGradient id="gradient" gradientTransform="rotate(45 0.5 0.5)"><stop offset="0%" stop-color="#304b63"></stop><stop offset="100%" stop-color="#261b1d"></stop></linearGradient></defs><g><g fill="#87ced8" transform="matrix(3.4629197427959038,0,0,3.4629197427959038,28.59447772265453,119.13009392574135)" stroke="#374f42" stroke-width="0.7"><path d="M4.95 0L1.65 0L1.65-8.28L0.12-8.28L0.12-10.57L1.65-10.57L1.65-11.41Q1.65-13.21 2.71-14.21Q3.78-15.21 5.70-15.21L5.70-15.21Q6.41-15.21 7.25-15L7.25-15L7.26-12.58Q6.95-12.67 6.45-12.67L6.45-12.67Q4.95-12.67 4.95-11.38L4.95-11.38L4.95-10.57L7.01-10.57L7.01-8.28L4.95-8.28L4.95 0ZM7.55-5.24L7.55-5.36Q7.55-6.96 8.08-8.19Q8.60-9.42 9.59-10.09Q10.58-10.76 11.88-10.76L11.88-10.76Q13.54-10.76 14.46-9.65L14.46-9.65L14.58-10.57L17.57-10.57L17.57-0.40Q17.57 1.00 16.92 2.03Q16.27 3.06 15.04 3.61Q13.81 4.16 12.19 4.16L12.19 4.16Q11.03 4.16 9.94 3.72Q8.85 3.28 8.27 2.58L8.27 2.58L9.65 0.64Q10.57 1.73 12.07 1.73L12.07 1.73Q14.26 1.73 14.26-0.52L14.26-0.52L14.26-0.85Q13.31 0.20 11.87 0.20L11.87 0.20Q9.93 0.20 8.74-1.28Q7.55-2.76 7.55-5.24L7.55-5.24ZM10.85-5.16L10.85-5.16Q10.85-3.86 11.34-3.10Q11.83-2.34 12.71-2.34L12.71-2.34Q13.77-2.34 14.26-3.06L14.26-3.06L14.26-7.50Q13.78-8.22 12.72-8.22L12.72-8.22Q11.85-8.22 11.35-7.44Q10.85-6.65 10.85-5.16ZM29.31-2.54L29.31 0L19.38 0L19.38-2.15L23.96-6.95Q25.64-8.88 25.64-10.01L25.64-10.01Q25.64-10.93 25.24-11.41Q24.84-11.88 24.08-11.88L24.08-11.88Q23.33-11.88 22.86-11.25Q22.39-10.61 22.39-9.65L22.39-9.65L19.09-9.65Q19.09-10.96 19.75-12.07Q20.40-13.17 21.56-13.80Q22.72-14.42 24.16-14.42L24.16-14.42Q26.46-14.42 27.71-13.36Q28.96-12.29 28.96-10.30L28.96-10.30Q28.96-9.46 28.64-8.67Q28.33-7.87 27.67-7.00Q27.01-6.12 25.55-4.66L25.55-4.66L23.71-2.54L29.31-2.54ZM38.42-14.42L38.92-14.42L38.92-11.84L38.77-11.84Q36.92-11.84 35.74-10.95Q34.55-10.07 34.28-8.50L34.28-8.50Q35.39-9.59 37.09-9.59L37.09-9.59Q38.94-9.59 40.03-8.24Q41.12-6.89 41.12-4.71L41.12-4.71Q41.12-3.35 40.48-2.22Q39.84-1.08 38.70-0.44Q37.55 0.20 36.15 0.20L36.15 0.20Q34.64 0.20 33.45-0.49Q32.26-1.18 31.59-2.46Q30.93-3.74 30.91-5.41L30.91-5.41L30.91-6.73Q30.91-8.93 31.85-10.68Q32.79-12.43 34.54-13.43Q36.29-14.42 38.42-14.42L38.42-14.42ZM35.95-7.07L35.95-7.07Q35.29-7.07 34.85-6.77Q34.41-6.46 34.20-6.03L34.20-6.03L34.20-5.04Q34.20-2.34 36.06-2.34L36.06-2.34Q36.82-2.34 37.32-3.02Q37.82-3.69 37.82-4.71L37.82-4.71Q37.82-5.75 37.31-6.41Q36.80-7.07 35.95-7.07Z"></path></g></g></svg>
@@ -0,0 +1,14 @@
1
+ API
2
+ ===
3
+
4
+ .. autosummary::
5
+ :toctree: generated
6
+
7
+ free_groups_26.letter
8
+ free_groups_26.free_group
9
+ free_groups_26.word
10
+ free_groups_26.morphism
11
+ free_groups_26.whitehead_automorphism
12
+ free_groups_26.whitehead_graph
13
+ free_groups_26.whitehead_minimization
14
+ free_groups_26.aut_orbit_bruteforce
@@ -0,0 +1,11 @@
1
+ Classes
2
+ =======
3
+
4
+ .. toctree::
5
+
6
+ letter
7
+ free_group
8
+ word
9
+ morphism
10
+ log
11
+ whitehead_graph
@@ -0,0 +1,14 @@
1
+ FreeGroup
2
+ =========
3
+
4
+ .. py:currentmodule:: free_groups_26
5
+
6
+ .. testsetup::
7
+
8
+ from free_groups_26 import *
9
+
10
+ This class is defined in ``free_groups_26.free_group``.
11
+
12
+ .. autoclass:: FreeGroup
13
+ :members:
14
+ :special-members: __eq__
@@ -0,0 +1,17 @@
1
+ Letter
2
+ ======
3
+
4
+ .. py:currentmodule:: free_groups_26
5
+
6
+ .. testsetup::
7
+
8
+ from free_groups_26 import Letter
9
+
10
+ .. autotype:: Symbol
11
+ .. autotype:: Exponent
12
+
13
+ This class is defined in ``free_groups_26.letter``.
14
+
15
+ .. autoclass:: Letter
16
+ :members:
17
+
@@ -0,0 +1,20 @@
1
+ Log
2
+ ===
3
+
4
+ .. py:currentmodule:: free_groups_26
5
+
6
+ .. testsetup::
7
+
8
+ from free_groups_26 import *
9
+
10
+ .. autotype:: Log
11
+
12
+ This class is defined in ``free_groups_26.log``.
13
+
14
+ .. autoclass:: LogItem
15
+ :members:
16
+
17
+
18
+ .. autofunction:: new_log
19
+
20
+ .. autofunction:: display_log
@@ -0,0 +1,15 @@
1
+ Morphism
2
+ ========
3
+
4
+ .. py:currentmodule:: free_groups_26
5
+
6
+ .. testsetup::
7
+
8
+ from free_groups_26 import *
9
+ from sortedcontainers import SortedDict
10
+
11
+ This class is defined in ``free_groups_26.morphism``.
12
+
13
+ .. autoclass:: Morphism
14
+ :members:
15
+ :special-members: __call__
@@ -0,0 +1,19 @@
1
+ Whitehead Graph
2
+ ===============
3
+
4
+ .. py:currentmodule:: free_groups_26
5
+
6
+ .. testsetup::
7
+
8
+ from free_groups_26 import *
9
+
10
+ This type alias is defined in ``free_groups_26.whitehead_graph``.
11
+
12
+ .. py:type:: WhiteheadGraph
13
+ :canonical: Graph[Letter]
14
+
15
+ ``Graph`` refers to ``networkx.Graph``.
16
+
17
+ .. seealso::
18
+
19
+ The documentation for ``networkx``: https://networkx.org/documentation/stable/index.html
@@ -0,0 +1,14 @@
1
+ Word
2
+ ====
3
+
4
+ .. py:currentmodule:: free_groups_26
5
+
6
+ .. testsetup::
7
+
8
+ from free_groups_26 import *
9
+
10
+ This class is defined in ``free_groups_26.word``.
11
+
12
+ .. autoclass:: Word
13
+ :members:
14
+ :special-members: __eq__, __mul__, __pow__, __repr__, __len__, __getitem__
@@ -0,0 +1,42 @@
1
+ import sys
2
+ from pathlib import Path
3
+
4
+ path = str(Path("../..", "src").resolve())
5
+ print(path)
6
+ sys.path.insert(0, path)
7
+ # Configuration file for the Sphinx documentation builder.
8
+ #
9
+ # For the full list of built-in configuration values, see the documentation:
10
+ # https://www.sphinx-doc.org/en/master/usage/configuration.html
11
+
12
+ # -- Project information -----------------------------------------------------
13
+ # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
14
+
15
+ project = "free_groups_26"
16
+ copyright = "2026, Sudhir Krisna"
17
+ author = "Sudhir Krisna"
18
+ release = "v1.1.1"
19
+
20
+ # -- General configuration ---------------------------------------------------
21
+ # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
22
+
23
+ extensions = [
24
+ "sphinx.ext.autodoc",
25
+ "sphinx.ext.doctest",
26
+ "sphinx.ext.autosummary",
27
+ ]
28
+
29
+ templates_path = ["_templates"]
30
+ exclude_patterns = []
31
+
32
+
33
+ # -- Options for HTML output -------------------------------------------------
34
+ # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
35
+
36
+ html_theme = "furo"
37
+ html_logo = "_static/logo.svg"
38
+ html_favicon = "_static/logo.svg"
39
+ html_static_path = ["_static"]
40
+ add_module_names = False
41
+ autoclass_content = "both"
42
+ autodoc_member_order = "bysource"
@@ -0,0 +1,16 @@
1
+ Bruteforce Minimization Functions
2
+ =================================
3
+
4
+ .. py:currentmodule:: free_groups_26
5
+
6
+ .. testsetup::
7
+
8
+ from free_groups_26 import *
9
+
10
+ These functions are defined in ``free_groups_26.minimize_bruteforce``.
11
+
12
+ .. autofunction:: minimize_once_bruteforce
13
+
14
+ .. autofunction:: minimize_once_bruteforce_lazy
15
+
16
+ .. autofunction:: minimize_bruteforce
@@ -0,0 +1,12 @@
1
+ Bruteforce Orbit Functions
2
+ =================================
3
+
4
+ .. py:currentmodule:: free_groups_26
5
+
6
+ .. testsetup::
7
+
8
+ from free_groups_26 import *
9
+
10
+ These functions are defined in ``free_groups_26.aut_orbit_bruteforce``.
11
+
12
+ .. autofunction:: find_minimal_automorphic_orbit
@@ -0,0 +1,12 @@
1
+ Free Group Functions
2
+ =========================
3
+
4
+ .. py:currentmodule:: free_groups_26
5
+
6
+ .. testsetup::
7
+
8
+ from free_groups_26 import *
9
+
10
+ These functions are defined in ``free_groups_26.free_group``.
11
+
12
+ .. autofunction:: get_free_group
@@ -0,0 +1,13 @@
1
+ Functions
2
+ =========
3
+
4
+ .. toctree::
5
+
6
+ letter
7
+ free_group
8
+ word
9
+ whitehead_automorphism
10
+ bruteforce
11
+ whitehead_graph
12
+ whitehead_minimization
13
+ bruteforce_orbit
@@ -0,0 +1,16 @@
1
+ Letter Functions
2
+ =====================
3
+
4
+ .. py:currentmodule:: free_groups_26
5
+
6
+ .. testsetup::
7
+
8
+ from free_groups_26 import letter_from_str_a, letter_from_str_b, letter_from_str
9
+
10
+ These functions are defined in ``free_groups_26.letter``.
11
+
12
+ .. autofunction:: letter_from_str_a
13
+
14
+ .. autofunction:: letter_from_str_b
15
+
16
+ .. autofunction:: letter_from_str