pyrosper 0.1.0.post12__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 (32) hide show
  1. pyrosper-0.1.0.post12/.github/workflows/publish.yml +55 -0
  2. pyrosper-0.1.0.post12/.github/workflows/python-package.yml +79 -0
  3. pyrosper-0.1.0.post12/.github/workflows/test-publish.yml +100 -0
  4. pyrosper-0.1.0.post12/.gitignore +4 -0
  5. pyrosper-0.1.0.post12/.pre-commit-config.yaml +41 -0
  6. pyrosper-0.1.0.post12/LICENSE +21 -0
  7. pyrosper-0.1.0.post12/PKG-INFO +60 -0
  8. pyrosper-0.1.0.post12/README.md +39 -0
  9. pyrosper-0.1.0.post12/pyproject.toml +43 -0
  10. pyrosper-0.1.0.post12/pyrosper.egg-info/PKG-INFO +60 -0
  11. pyrosper-0.1.0.post12/pyrosper.egg-info/SOURCES.txt +30 -0
  12. pyrosper-0.1.0.post12/pyrosper.egg-info/dependency_links.txt +1 -0
  13. pyrosper-0.1.0.post12/pyrosper.egg-info/requires.txt +5 -0
  14. pyrosper-0.1.0.post12/pyrosper.egg-info/top_level.txt +1 -0
  15. pyrosper-0.1.0.post12/pytest.ini +3 -0
  16. pyrosper-0.1.0.post12/pytype.toml +86 -0
  17. pyrosper-0.1.0.post12/requirements-dev.txt +7 -0
  18. pyrosper-0.1.0.post12/requirements.txt +0 -0
  19. pyrosper-0.1.0.post12/setup.cfg +4 -0
  20. pyrosper-0.1.0.post12/setup.py +23 -0
  21. pyrosper-0.1.0.post12/src/__init__.py +0 -0
  22. pyrosper-0.1.0.post12/src/base_experiment.py +184 -0
  23. pyrosper-0.1.0.post12/src/base_experiment_test.py +197 -0
  24. pyrosper-0.1.0.post12/src/mock_algorithm.py +2 -0
  25. pyrosper-0.1.0.post12/src/mock_experiment.py +50 -0
  26. pyrosper-0.1.0.post12/src/pyrosper.py +95 -0
  27. pyrosper-0.1.0.post12/src/pyrosper_test.py +43 -0
  28. pyrosper-0.1.0.post12/src/symbol.py +7 -0
  29. pyrosper-0.1.0.post12/src/user_variant.py +13 -0
  30. pyrosper-0.1.0.post12/src/variant.py +9 -0
  31. pyrosper-0.1.0.post12/src/version.py +21 -0
  32. pyrosper-0.1.0.post12/test_release.sh +59 -0
@@ -0,0 +1,55 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ publish:
9
+ runs-on: ubuntu-latest
10
+ permissions:
11
+ contents: write
12
+ id-token: write
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+ with:
16
+ fetch-depth: 0 # Important for setuptools-scm to work properly
17
+ # Use GITHUB_TOKEN (automatically provided) or PAT if you prefer
18
+ token: ${{ secrets.GITHUB_TOKEN }}
19
+
20
+ - name: Set up Python
21
+ uses: actions/setup-python@v4
22
+ with:
23
+ python-version: '3.11'
24
+
25
+ - name: Install build dependencies
26
+ run: |
27
+ python -m pip install --upgrade pip
28
+ pip install build twine setuptools-scm
29
+
30
+ - name: Generate version file
31
+ run: |
32
+ # Generate the version.py file using setuptools-scm
33
+ python -c "
34
+ import setuptools_scm
35
+ from setuptools_scm import dump_version
36
+ version = setuptools_scm.get_version()
37
+ dump_version('.', version, 'src/version.py')
38
+ "
39
+
40
+ - name: Commit version file
41
+ run: |
42
+ git config --local user.email "action@github.com"
43
+ git config --local user.name "GitHub Action"
44
+ git add src/version.py
45
+ git commit -m "Update version.py for release" || echo "No changes to commit"
46
+ git push origin HEAD:${{ github.ref_name }}
47
+
48
+ - name: Build package
49
+ run: python -m build
50
+
51
+ - name: Publish to PyPI
52
+ env:
53
+ TWINE_USERNAME: __token__
54
+ TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
55
+ run: twine upload dist/*
@@ -0,0 +1,79 @@
1
+ name: Python Package
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ branches:
9
+ - main
10
+
11
+ jobs:
12
+ test:
13
+ runs-on: ubuntu-latest
14
+
15
+ steps:
16
+ - name: Checkout code
17
+ uses: actions/checkout@v3
18
+
19
+ - name: Set up Python
20
+ uses: actions/setup-python@v4
21
+ with:
22
+ python-version: "3.11"
23
+
24
+ - name: Install dependencies
25
+ run: |
26
+ python -m pip install --upgrade pip
27
+ pip install -r requirements-dev.txt
28
+ pip install pytest
29
+
30
+ - name: Run tests
31
+ run: pytest
32
+ - name: Check types with pyright
33
+ run: pyright src
34
+ - name: Check types with pytype
35
+ run: pytype src
36
+
37
+ build:
38
+ runs-on: ubuntu-latest
39
+ needs: test
40
+
41
+ steps:
42
+ - name: Checkout code
43
+ uses: actions/checkout@v3
44
+
45
+ - name: Set up Python
46
+ uses: actions/setup-python@v4
47
+ with:
48
+ python-version: "3.11"
49
+
50
+ - name: Install build tools
51
+ run: |
52
+ python -m pip install --upgrade pip
53
+ pip install build
54
+
55
+ - name: Build package
56
+ run: python -m build
57
+
58
+ publish:
59
+ runs-on: ubuntu-latest
60
+ needs: build
61
+ if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
62
+
63
+ steps:
64
+ - name: Checkout code
65
+ uses: actions/checkout@v3
66
+
67
+ - name: Set up Python
68
+ uses: actions/setup-python@v4
69
+ with:
70
+ python-version: "3.11"
71
+
72
+ - name: Install Twine
73
+ run: python -m pip install twine
74
+
75
+ - name: Publish to PyPI
76
+ env:
77
+ TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
78
+ TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
79
+ run: python -m twine upload dist/*
@@ -0,0 +1,100 @@
1
+ name: Test Publish Workflow
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ test_version:
7
+ description: 'Test version to use (e.g., 0.1.1)'
8
+ required: true
9
+ default: '0.1.1'
10
+ dry_run:
11
+ description: 'Dry run (do not actually publish)'
12
+ required: false
13
+ default: true
14
+ type: boolean
15
+
16
+ jobs:
17
+ test-publish:
18
+ runs-on: ubuntu-latest
19
+ permissions:
20
+ contents: write
21
+ id-token: write
22
+
23
+ steps:
24
+ - uses: actions/checkout@v4
25
+ with:
26
+ fetch-depth: 0
27
+ token: ${{ secrets.GITHUB_TOKEN }}
28
+
29
+ - name: Set up Python
30
+ uses: actions/setup-python@v4
31
+ with:
32
+ python-version: '3.11'
33
+
34
+ - name: Install build dependencies
35
+ run: |
36
+ python -m pip install --upgrade pip
37
+ pip install build twine setuptools-scm
38
+
39
+ - name: Create test tag
40
+ run: |
41
+ git config --local user.email "action@github.com"
42
+ git config --local user.name "GitHub Action"
43
+ git tag -d v${{ inputs.test_version }} || true
44
+ git push origin :refs/tags/v${{ inputs.test_version }} || true
45
+ git tag v${{ inputs.test_version }}
46
+ git push origin v${{ inputs.test_version }}
47
+
48
+ - name: Generate version file
49
+ run: |
50
+ # Generate the version.py file using setuptools-scm
51
+ python -c "
52
+ import setuptools_scm
53
+ from setuptools_scm import dump_version
54
+ version = setuptools_scm.get_version()
55
+ dump_version('.', version, 'src/version.py')
56
+ "
57
+
58
+ - name: Show generated version
59
+ run: |
60
+ echo "Generated version file:"
61
+ cat src/version.py
62
+ echo ""
63
+ echo "Version from setuptools-scm:"
64
+ python -c "import setuptools_scm; print(setuptools_scm.get_version())"
65
+
66
+ - name: Build package
67
+ run: |
68
+ python -m build
69
+ echo "Built packages:"
70
+ ls -la dist/
71
+
72
+ - name: Test package contents
73
+ run: |
74
+ echo "Package contents:"
75
+ tar -tzf dist/*.tar.gz | head -20
76
+ echo ""
77
+ echo "Wheel contents:"
78
+ unzip -l dist/*.whl | head -20
79
+
80
+ - name: Test PyPI upload (dry run)
81
+ if: inputs.dry_run
82
+ run: |
83
+ echo "Testing PyPI upload (dry run)..."
84
+ python -m twine check dist/*
85
+ echo "Package validation passed!"
86
+
87
+ - name: Actually publish to PyPI
88
+ if: ${{ !inputs.dry_run }}
89
+ env:
90
+ TWINE_USERNAME: __token__
91
+ TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
92
+ run: |
93
+ echo "Publishing to PyPI..."
94
+ twine upload dist/*
95
+
96
+ - name: Clean up test tag
97
+ if: always()
98
+ run: |
99
+ git tag -d v${{ inputs.test_version }} || true
100
+ git push origin :refs/tags/v${{ inputs.test_version }} || true
@@ -0,0 +1,4 @@
1
+ build
2
+ pyrosper.egg-info
3
+ .idea
4
+ __pycache__
@@ -0,0 +1,41 @@
1
+ ci:
2
+ autoupdate_schedule: monthly
3
+
4
+ repos:
5
+ - repo: https://github.com/pre-commit/pre-commit-hooks
6
+ rev: v5.0.0
7
+ - repo: https://github.com/psf/black
8
+ rev: 25.1.0
9
+ hooks:
10
+ - id: black
11
+ - repo: local
12
+ hooks:
13
+ - id: pytype
14
+ name: pytype
15
+ entry: pytype
16
+ language: python
17
+ types: [ python ]
18
+ args: [ "--config=pytype.toml" ]
19
+ pass_filenames: false
20
+ require_serial: true
21
+ - repo: https://github.com/NorthIsUp/pyright-pretty
22
+ rev: v0.1.0
23
+ hooks:
24
+ - id: pyright-pretty
25
+ args: [ "src" ]
26
+ - repo: https://github.com/timothycrosley/isort
27
+ rev: 6.0.1
28
+ hooks:
29
+ - id: isort
30
+ exclude: '^clients/'
31
+ args: [ "--profile", "black" ]
32
+ - repo: https://github.com/pre-commit/pre-commit-hooks
33
+ rev: v5.0.0
34
+ hooks:
35
+ - id: no-commit-to-branch
36
+ args: ['--branch', 'main']
37
+ - repo: https://github.com/econchick/interrogate
38
+ rev: 1.7.0
39
+ hooks:
40
+ - id: interrogate
41
+ args: [--config=pyproject.toml]
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 BKKnights
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,60 @@
1
+ Metadata-Version: 2.4
2
+ Name: pyrosper
3
+ Version: 0.1.0.post12
4
+ Summary: A continuously improving, experimentation framework.
5
+ Home-page: https://github.com/BKKnights/pyrosper
6
+ Author: Robert Plummer
7
+ Author-email: Robert Plummer <robertleeplummerjr@gmail.com>
8
+ Project-URL: Homepage, https://github.com/BKKnights/pyrosper
9
+ Project-URL: Bug Tracker, https://github.com/BKKnights/pyrosper/issues
10
+ Requires-Python: >=3.11
11
+ Description-Content-Type: text/markdown
12
+ License-File: LICENSE
13
+ Provides-Extra: dev
14
+ Requires-Dist: pytest; extra == "dev"
15
+ Requires-Dist: black; extra == "dev"
16
+ Requires-Dist: isort; extra == "dev"
17
+ Dynamic: author
18
+ Dynamic: home-page
19
+ Dynamic: license-file
20
+ Dynamic: requires-python
21
+
22
+ ## `\\//,` pyrosper (pronounced "prosper")
23
+ A continuously improving, experimentation framework.
24
+ Now in python, ported from the [Typescript counterpart](https://github.com/BKKnights/prosper).
25
+
26
+ ### Installation
27
+ TBD
28
+
29
+ ### Why
30
+ pyrosper provides a means of:
31
+ * injecting intelligently selected experimental code that is shorted lived
32
+ * using multi armed bandit machine learning to selected which experimental code is injected
33
+ * prevents code churn where long-lived code belongs
34
+
35
+ The non-pyrosper way:
36
+ * Uses feature flagging
37
+ * Favors code churn, with highly fractured experimentation
38
+ * Constantly effects test coverage
39
+ * Provides a very blurry understanding of the code base when experimenting
40
+
41
+ The pyrosper way:
42
+ * Use experiments rather than Features Flags
43
+ * Picture one master switch, rather than a many small switches
44
+ * Code for each variant lives close together, within an experiment
45
+ * Favors short-lived experimental code, that accentuates long-lived code
46
+ * Once understandings from a variant is known, then it can be moved from short-lived (experiment) to long-lived (source)
47
+ * Meant to churn as little as possible.
48
+ * Provides a very clear understanding of the code base when experimenting
49
+
50
+
51
+ ### Examples
52
+ TBD
53
+
54
+ ...Vulcan's are cool.
55
+
56
+
57
+ TODO:
58
+ * Make package
59
+ * Create pip install launchdarkly-server-sdk project
60
+ *
@@ -0,0 +1,39 @@
1
+ ## `\\//,` pyrosper (pronounced "prosper")
2
+ A continuously improving, experimentation framework.
3
+ Now in python, ported from the [Typescript counterpart](https://github.com/BKKnights/prosper).
4
+
5
+ ### Installation
6
+ TBD
7
+
8
+ ### Why
9
+ pyrosper provides a means of:
10
+ * injecting intelligently selected experimental code that is shorted lived
11
+ * using multi armed bandit machine learning to selected which experimental code is injected
12
+ * prevents code churn where long-lived code belongs
13
+
14
+ The non-pyrosper way:
15
+ * Uses feature flagging
16
+ * Favors code churn, with highly fractured experimentation
17
+ * Constantly effects test coverage
18
+ * Provides a very blurry understanding of the code base when experimenting
19
+
20
+ The pyrosper way:
21
+ * Use experiments rather than Features Flags
22
+ * Picture one master switch, rather than a many small switches
23
+ * Code for each variant lives close together, within an experiment
24
+ * Favors short-lived experimental code, that accentuates long-lived code
25
+ * Once understandings from a variant is known, then it can be moved from short-lived (experiment) to long-lived (source)
26
+ * Meant to churn as little as possible.
27
+ * Provides a very clear understanding of the code base when experimenting
28
+
29
+
30
+ ### Examples
31
+ TBD
32
+
33
+ ...Vulcan's are cool.
34
+
35
+
36
+ TODO:
37
+ * Make package
38
+ * Create pip install launchdarkly-server-sdk project
39
+ *
@@ -0,0 +1,43 @@
1
+ [metadata]
2
+ name = "pyrosper"
3
+
4
+ [project]
5
+ name = "pyrosper"
6
+ dynamic = ["version"]
7
+ description = "A continuously improving, experimentation framework."
8
+ readme = "README.md"
9
+ authors = [
10
+ { name = "Robert Plummer", email = "robertleeplummerjr@gmail.com" }
11
+ ]
12
+ requires-python = '>=3.11'
13
+
14
+ [project.urls]
15
+ "Homepage" = "https://github.com/BKKnights/pyrosper"
16
+ "Bug Tracker" = "https://github.com/BKKnights/pyrosper/issues"
17
+
18
+ [tool.interrogate]
19
+ fail-under = 80
20
+ verbose = 1
21
+
22
+ [tool.isort]
23
+ profile = "black"
24
+ line_length = 79
25
+
26
+ [tool.pytest.ini_options]
27
+ addopts = "-n auto"
28
+
29
+ [project.optional-dependencies]
30
+ dev = [
31
+ "pytest",
32
+ "black",
33
+ "isort"
34
+ ]
35
+
36
+ [build-system]
37
+ requires = ["setuptools", "wheel", "setuptools-scm"]
38
+ build-backend = "setuptools.build_meta"
39
+
40
+ [tool.setuptools_scm]
41
+ version_scheme = "post-release"
42
+ local_scheme = "no-local-version"
43
+ version_file = "src/version.py"
@@ -0,0 +1,60 @@
1
+ Metadata-Version: 2.4
2
+ Name: pyrosper
3
+ Version: 0.1.0.post12
4
+ Summary: A continuously improving, experimentation framework.
5
+ Home-page: https://github.com/BKKnights/pyrosper
6
+ Author: Robert Plummer
7
+ Author-email: Robert Plummer <robertleeplummerjr@gmail.com>
8
+ Project-URL: Homepage, https://github.com/BKKnights/pyrosper
9
+ Project-URL: Bug Tracker, https://github.com/BKKnights/pyrosper/issues
10
+ Requires-Python: >=3.11
11
+ Description-Content-Type: text/markdown
12
+ License-File: LICENSE
13
+ Provides-Extra: dev
14
+ Requires-Dist: pytest; extra == "dev"
15
+ Requires-Dist: black; extra == "dev"
16
+ Requires-Dist: isort; extra == "dev"
17
+ Dynamic: author
18
+ Dynamic: home-page
19
+ Dynamic: license-file
20
+ Dynamic: requires-python
21
+
22
+ ## `\\//,` pyrosper (pronounced "prosper")
23
+ A continuously improving, experimentation framework.
24
+ Now in python, ported from the [Typescript counterpart](https://github.com/BKKnights/prosper).
25
+
26
+ ### Installation
27
+ TBD
28
+
29
+ ### Why
30
+ pyrosper provides a means of:
31
+ * injecting intelligently selected experimental code that is shorted lived
32
+ * using multi armed bandit machine learning to selected which experimental code is injected
33
+ * prevents code churn where long-lived code belongs
34
+
35
+ The non-pyrosper way:
36
+ * Uses feature flagging
37
+ * Favors code churn, with highly fractured experimentation
38
+ * Constantly effects test coverage
39
+ * Provides a very blurry understanding of the code base when experimenting
40
+
41
+ The pyrosper way:
42
+ * Use experiments rather than Features Flags
43
+ * Picture one master switch, rather than a many small switches
44
+ * Code for each variant lives close together, within an experiment
45
+ * Favors short-lived experimental code, that accentuates long-lived code
46
+ * Once understandings from a variant is known, then it can be moved from short-lived (experiment) to long-lived (source)
47
+ * Meant to churn as little as possible.
48
+ * Provides a very clear understanding of the code base when experimenting
49
+
50
+
51
+ ### Examples
52
+ TBD
53
+
54
+ ...Vulcan's are cool.
55
+
56
+
57
+ TODO:
58
+ * Make package
59
+ * Create pip install launchdarkly-server-sdk project
60
+ *
@@ -0,0 +1,30 @@
1
+ .gitignore
2
+ .pre-commit-config.yaml
3
+ LICENSE
4
+ README.md
5
+ pyproject.toml
6
+ pytest.ini
7
+ pytype.toml
8
+ requirements-dev.txt
9
+ requirements.txt
10
+ setup.py
11
+ test_release.sh
12
+ .github/workflows/publish.yml
13
+ .github/workflows/python-package.yml
14
+ .github/workflows/test-publish.yml
15
+ pyrosper.egg-info/PKG-INFO
16
+ pyrosper.egg-info/SOURCES.txt
17
+ pyrosper.egg-info/dependency_links.txt
18
+ pyrosper.egg-info/requires.txt
19
+ pyrosper.egg-info/top_level.txt
20
+ src/__init__.py
21
+ src/base_experiment.py
22
+ src/base_experiment_test.py
23
+ src/mock_algorithm.py
24
+ src/mock_experiment.py
25
+ src/pyrosper.py
26
+ src/pyrosper_test.py
27
+ src/symbol.py
28
+ src/user_variant.py
29
+ src/variant.py
30
+ src/version.py
@@ -0,0 +1,5 @@
1
+
2
+ [dev]
3
+ pytest
4
+ black
5
+ isort
@@ -0,0 +1,3 @@
1
+ [pytest]
2
+ markers =
3
+ asyncio: for testing async code
@@ -0,0 +1,86 @@
1
+ # NOTE: All relative paths are relative to the location of this file.
2
+
3
+ [tool.pytype]
4
+
5
+ # Space-separated list of files or directories to exclude.
6
+ exclude = [
7
+ '**/*_test.py',
8
+ ]
9
+
10
+ # Space-separated list of files or directories to process.
11
+ inputs = [
12
+ './app',
13
+ ]
14
+
15
+ # Keep going past errors to analyze as many files as possible.
16
+ keep_going = true
17
+
18
+ # Run N jobs in parallel. When 'auto' is used, this will be equivalent to the
19
+ # number of CPUs on the host system.
20
+ jobs = 4
21
+
22
+ # All pytype output goes here.
23
+ output = '.pytype'
24
+
25
+ # Platform (e.g., "linux", "win32") that the target code runs on.
26
+ platform = 'darwin'
27
+
28
+ # Paths to source code directories, separated by ':'.
29
+ pythonpath = '.'
30
+
31
+ # Python version (major.minor) of the target code.
32
+ python_version = '3.11'
33
+
34
+ # Bind 'self' in methods with non-transparent decorators. This flag is temporary
35
+ # and will be removed once this behavior is enabled by default.
36
+ bind_decorated_methods = true
37
+
38
+ # Enable parameter count checks for overriding methods with renamed arguments.
39
+ # This flag is temporary and will be removed once this behavior is enabled by
40
+ # default.
41
+ overriding_renamed_parameter_count_checks = false
42
+
43
+ # Variables initialized as None retain their None binding. This flag is
44
+ # temporary and will be removed once this behavior is enabled by default.
45
+ strict_none_binding = false
46
+
47
+ # Support the third-party fiddle library. This flag is temporary and will be
48
+ # removed once this behavior is enabled by default.
49
+ use_fiddle_overlay = false
50
+
51
+ # Opt-in: Do not allow Any as a return type.
52
+ no_return_any = false
53
+
54
+ # Opt-in: Require decoration with @typing.override when overriding a method or
55
+ # nested class attribute of a parent class.
56
+ require_override_decorator = false
57
+
58
+ # Experimental: Infer precise return types even for invalid function calls.
59
+ precise_return = true
60
+
61
+ # Experimental: Solve unknown types to label with structural types.
62
+ protocols = false
63
+
64
+ # Experimental: Only load submodules that are explicitly imported.
65
+ strict_import = false
66
+
67
+ # Experimental: Enable exhaustive checking of function parameter types.
68
+ strict_parameter_checks = false
69
+
70
+ # Experimental: Emit errors for comparisons between incompatible primitive
71
+ # types.
72
+ strict_primitive_comparisons = false
73
+
74
+ # Experimental: Check that variables are defined in all possible code paths.
75
+ strict_undefined_checks = false
76
+
77
+ # Experimental: FOR TESTING ONLY. Use pytype/rewrite/.
78
+ use_rewrite = false
79
+
80
+ # Space-separated list of error names to ignore.
81
+ disable = [
82
+ 'pyi-error',
83
+ ]
84
+
85
+ # Don't report errors.
86
+ report_errors = true
@@ -0,0 +1,7 @@
1
+ black
2
+ isort
3
+ pyright
4
+ pytest
5
+ pytest-mock
6
+ pytest-asyncio
7
+ pytype
File without changes
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,23 @@
1
+ from setuptools import setup, find_packages
2
+
3
+ setup(
4
+ name="pyrosper",
5
+ use_scm_version={
6
+ "write_to": "src/version.py", # This writes a version.py file on build
7
+ "write_to_template": '__version__ = "{version}"\n',
8
+ },
9
+ author="Robert Plummer",
10
+ author_email="robertleeplummerjr@gmail.com",
11
+ description="A continuously improving experimentation framework.",
12
+ long_description=open("README.md").read(),
13
+ long_description_content_type="text/markdown",
14
+ url="https://github.com/BKKnights/pyrosper",
15
+ packages=find_packages(),
16
+ classifiers=[
17
+ "Programming Language :: Python :: 3",
18
+ "License :: OSI Approved :: MIT License",
19
+ "Operating System :: OS Independent",
20
+ ],
21
+ python_requires=">=3.11",
22
+ setup_requires=["setuptools-scm"],
23
+ )
File without changes