tlmtc 0.1.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 (56) hide show
  1. tlmtc-0.1.0/.github/dependabot.yml +49 -0
  2. tlmtc-0.1.0/.github/labeler.yml +41 -0
  3. tlmtc-0.1.0/.github/workflows/ci.yml +123 -0
  4. tlmtc-0.1.0/.github/workflows/pr-labeler.yml +46 -0
  5. tlmtc-0.1.0/.github/workflows/release.yml +141 -0
  6. tlmtc-0.1.0/.gitignore +39 -0
  7. tlmtc-0.1.0/CONTRIBUTING.md +102 -0
  8. tlmtc-0.1.0/LICENSE.md +21 -0
  9. tlmtc-0.1.0/PKG-INFO +223 -0
  10. tlmtc-0.1.0/README.md +178 -0
  11. tlmtc-0.1.0/SECURITY.md +18 -0
  12. tlmtc-0.1.0/assets/tlmtc-bright.png +0 -0
  13. tlmtc-0.1.0/assets/tlmtc-dark.png +0 -0
  14. tlmtc-0.1.0/examples/paired_example.csv +1001 -0
  15. tlmtc-0.1.0/examples/paired_example_unlabeled.csv +1001 -0
  16. tlmtc-0.1.0/pyproject.toml +110 -0
  17. tlmtc-0.1.0/src/tlmtc/__init__.py +54 -0
  18. tlmtc-0.1.0/src/tlmtc/__main__.py +6 -0
  19. tlmtc-0.1.0/src/tlmtc/api.py +455 -0
  20. tlmtc-0.1.0/src/tlmtc/cli.py +345 -0
  21. tlmtc-0.1.0/src/tlmtc/data_contracts.py +160 -0
  22. tlmtc-0.1.0/src/tlmtc/data_pipeline.py +257 -0
  23. tlmtc-0.1.0/src/tlmtc/data_preparation.py +221 -0
  24. tlmtc-0.1.0/src/tlmtc/evaluation.py +291 -0
  25. tlmtc-0.1.0/src/tlmtc/evaluation_pipeline.py +309 -0
  26. tlmtc-0.1.0/src/tlmtc/finetune_pipeline.py +355 -0
  27. tlmtc-0.1.0/src/tlmtc/hpo.py +157 -0
  28. tlmtc-0.1.0/src/tlmtc/meta.py +86 -0
  29. tlmtc-0.1.0/src/tlmtc/paths.py +371 -0
  30. tlmtc-0.1.0/src/tlmtc/prediction.py +154 -0
  31. tlmtc-0.1.0/src/tlmtc/reporting.py +605 -0
  32. tlmtc-0.1.0/src/tlmtc/runtime_output.py +100 -0
  33. tlmtc-0.1.0/src/tlmtc/settings.py +456 -0
  34. tlmtc-0.1.0/src/tlmtc/training.py +339 -0
  35. tlmtc-0.1.0/tests/data/tiny_tokenizer/config.json +5 -0
  36. tlmtc-0.1.0/tests/data/tiny_tokenizer/vocab.txt +9 -0
  37. tlmtc-0.1.0/tests/integration/test_predict_tlmtc.py +491 -0
  38. tlmtc-0.1.0/tests/integration/test_train_tlmtc.py +506 -0
  39. tlmtc-0.1.0/tests/unit/test_api.py +875 -0
  40. tlmtc-0.1.0/tests/unit/test_cli.py +492 -0
  41. tlmtc-0.1.0/tests/unit/test_data_contracts.py +281 -0
  42. tlmtc-0.1.0/tests/unit/test_data_pipeline.py +631 -0
  43. tlmtc-0.1.0/tests/unit/test_data_preparation.py +416 -0
  44. tlmtc-0.1.0/tests/unit/test_evaluation.py +652 -0
  45. tlmtc-0.1.0/tests/unit/test_evaluation_pipeline.py +422 -0
  46. tlmtc-0.1.0/tests/unit/test_finetune_pipeline.py +930 -0
  47. tlmtc-0.1.0/tests/unit/test_hpo.py +185 -0
  48. tlmtc-0.1.0/tests/unit/test_meta.py +163 -0
  49. tlmtc-0.1.0/tests/unit/test_paths.py +559 -0
  50. tlmtc-0.1.0/tests/unit/test_prediction.py +191 -0
  51. tlmtc-0.1.0/tests/unit/test_public_api.py +165 -0
  52. tlmtc-0.1.0/tests/unit/test_reporting.py +941 -0
  53. tlmtc-0.1.0/tests/unit/test_runtime_output.py +182 -0
  54. tlmtc-0.1.0/tests/unit/test_settings.py +836 -0
  55. tlmtc-0.1.0/tests/unit/test_training.py +345 -0
  56. tlmtc-0.1.0/uv.lock +2835 -0
@@ -0,0 +1,49 @@
1
+ version: 2
2
+
3
+ updates:
4
+ - package-ecosystem: "uv"
5
+ directory: "/"
6
+ schedule:
7
+ interval: "monthly"
8
+ day: "monday"
9
+ time: "06:00"
10
+ timezone: "Europe/Berlin"
11
+ cooldown:
12
+ default-days: 14
13
+ open-pull-requests-limit: 5
14
+ versioning-strategy: "lockfile-only"
15
+ commit-message:
16
+ prefix: "deps"
17
+ labels:
18
+ - "dependencies"
19
+ groups:
20
+ minor-and-patch:
21
+ applies-to: version-updates
22
+ patterns:
23
+ - "*"
24
+ update-types:
25
+ - "minor"
26
+ - "patch"
27
+
28
+ - package-ecosystem: "github-actions"
29
+ directory: "/"
30
+ schedule:
31
+ interval: "monthly"
32
+ day: "monday"
33
+ time: "06:00"
34
+ timezone: "Europe/Berlin"
35
+ cooldown:
36
+ default-days: 14
37
+ open-pull-requests-limit: 5
38
+ commit-message:
39
+ prefix: "deps"
40
+ labels:
41
+ - "dependencies"
42
+ groups:
43
+ minor-and-patch:
44
+ applies-to: version-updates
45
+ patterns:
46
+ - "*"
47
+ update-types:
48
+ - "minor"
49
+ - "patch"
@@ -0,0 +1,41 @@
1
+ feature:
2
+ - head-branch:
3
+ - '^feat/'
4
+ - '^feature/'
5
+
6
+ fix:
7
+ - head-branch:
8
+ - '^fix/'
9
+ - '^bugfix/'
10
+
11
+ refactor:
12
+ - head-branch:
13
+ - '^refactor/'
14
+
15
+ tests:
16
+ - head-branch:
17
+ - '^test/'
18
+ - '^tests/'
19
+
20
+ documentation:
21
+ - head-branch:
22
+ - '^docs/'
23
+ - '^doc/'
24
+
25
+ ci:
26
+ - head-branch:
27
+ - '^ci/'
28
+
29
+ release:
30
+ - head-branch:
31
+ - '^release/'
32
+
33
+ chore:
34
+ - head-branch:
35
+ - '^chore/'
36
+ - '^build/'
37
+
38
+ dependencies:
39
+ - head-branch:
40
+ - '^deps/'
41
+ - '^dependabot/'
@@ -0,0 +1,123 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [ "main" ]
6
+ pull_request:
7
+ branches: [ "main" ]
8
+ workflow_dispatch:
9
+
10
+ env:
11
+ UV_VERSION: "0.9.30"
12
+ PYTHON_VERSION: "3.12"
13
+
14
+ jobs:
15
+ lint:
16
+ name: Lint
17
+ runs-on: ubuntu-latest
18
+
19
+ steps:
20
+ - name: Checkout code
21
+ uses: actions/checkout@v6
22
+
23
+ - name: Set up uv
24
+ uses: astral-sh/setup-uv@v8.1.0
25
+ with:
26
+ version: ${{ env.UV_VERSION }}
27
+ enable-cache: true
28
+ cache-dependency-glob: "uv.lock"
29
+
30
+ - name: Set up Python
31
+ run: uv python install ${{ env.PYTHON_VERSION }}
32
+
33
+ - name: Check lockfile is current
34
+ run: uv lock --check
35
+
36
+ - name: Install lint dependencies
37
+ run: uv sync --group lint --frozen
38
+
39
+ - name: Run Ruff formatter
40
+ run: uv run ruff format --check .
41
+
42
+ - name: Run Ruff linter
43
+ run: uv run ruff check .
44
+
45
+ type:
46
+ name: Type check
47
+ runs-on: ubuntu-latest
48
+
49
+ steps:
50
+ - name: Checkout code
51
+ uses: actions/checkout@v6
52
+
53
+ - name: Set up uv
54
+ uses: astral-sh/setup-uv@v8.1.0
55
+ with:
56
+ version: ${{ env.UV_VERSION }}
57
+ enable-cache: true
58
+ cache-dependency-glob: "uv.lock"
59
+
60
+ - name: Set up Python
61
+ run: uv python install ${{ env.PYTHON_VERSION }}
62
+
63
+ - name: Check lockfile is current
64
+ run: uv lock --check
65
+
66
+ - name: Install type-check dependencies
67
+ run: uv sync --group type --frozen
68
+
69
+ - name: Run mypy
70
+ run: uv run mypy src/tlmtc
71
+
72
+ test:
73
+ name: Test
74
+ runs-on: ubuntu-latest
75
+
76
+ steps:
77
+ - name: Checkout code
78
+ uses: actions/checkout@v6
79
+
80
+ - name: Set up uv
81
+ uses: astral-sh/setup-uv@v8.1.0
82
+ with:
83
+ version: ${{ env.UV_VERSION }}
84
+ enable-cache: true
85
+ cache-dependency-glob: "uv.lock"
86
+
87
+ - name: Set up Python
88
+ run: uv python install ${{ env.PYTHON_VERSION }}
89
+
90
+ - name: Check lockfile is current
91
+ run: uv lock --check
92
+
93
+ - name: Install test dependencies
94
+ run: uv sync --group test --extra full --frozen
95
+
96
+ - name: Run unit tests
97
+ run: uv run pytest -q -m "not integration"
98
+
99
+ build:
100
+ name: Build package
101
+ runs-on: ubuntu-latest
102
+
103
+ steps:
104
+ - name: Checkout code
105
+ uses: actions/checkout@v6
106
+
107
+ - name: Set up uv
108
+ uses: astral-sh/setup-uv@v8.1.0
109
+ with:
110
+ version: ${{ env.UV_VERSION }}
111
+ enable-cache: true
112
+ cache-dependency-glob: "uv.lock"
113
+
114
+ - name: Set up Python
115
+ run: uv python install ${{ env.PYTHON_VERSION }}
116
+
117
+ - name: Check lockfile is current
118
+ run: uv lock --check
119
+
120
+ - name: Build package
121
+ run: uv build
122
+
123
+
@@ -0,0 +1,46 @@
1
+ name: Pull Request Labeler
2
+
3
+ on:
4
+ pull_request_target:
5
+ types:
6
+ - opened
7
+ - reopened
8
+ - synchronize
9
+ - edited
10
+
11
+ permissions:
12
+ contents: read
13
+ pull-requests: write
14
+ issues: write
15
+
16
+ concurrency:
17
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
18
+ cancel-in-progress: true
19
+
20
+ jobs:
21
+ label:
22
+ name: Label pull request
23
+ runs-on: ubuntu-latest
24
+
25
+ steps:
26
+ - name: Apply type labels
27
+ uses: actions/labeler@v6
28
+ with:
29
+ sync-labels: true
30
+
31
+ - name: Apply size label
32
+ if: github.event.action != 'edited'
33
+ uses: codelytv/pr-size-labeler@v1
34
+ with:
35
+ xs_label: 'size: XS'
36
+ xs_max_size: '49'
37
+ s_label: 'size: S'
38
+ s_max_size: '199'
39
+ m_label: 'size: M'
40
+ m_max_size: '499'
41
+ l_label: 'size: L'
42
+ l_max_size: '999'
43
+ xl_label: 'size: XL'
44
+ fail_if_xl: 'false'
45
+ files_to_ignore: |
46
+ uv.lock
@@ -0,0 +1,141 @@
1
+ name: Release
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ build_package:
7
+ description: "Run full release preflight including package build"
8
+ required: false
9
+ type: boolean
10
+ default: false
11
+
12
+ push:
13
+ tags:
14
+ - "v*.*.*"
15
+
16
+ permissions:
17
+ contents: read
18
+
19
+ env:
20
+ UV_VERSION: "0.9.30"
21
+ PYTHON_VERSION: "3.12"
22
+
23
+ jobs:
24
+ integration-tests:
25
+ name: Run integration tests
26
+ runs-on: ubuntu-latest
27
+ timeout-minutes: 30
28
+
29
+ steps:
30
+ - name: Checkout code
31
+ uses: actions/checkout@v6
32
+ with:
33
+ fetch-depth: 0
34
+
35
+ - name: Check release tag is on main
36
+ if: github.event_name == 'push'
37
+ run: |
38
+ git fetch origin main
39
+ git merge-base --is-ancestor HEAD origin/main
40
+
41
+ - name: Set up uv
42
+ uses: astral-sh/setup-uv@v8.1.0
43
+ with:
44
+ version: ${{ env.UV_VERSION }}
45
+ enable-cache: true
46
+ cache-dependency-glob: "uv.lock"
47
+
48
+ - name: Set up Python
49
+ run: uv python install ${{ env.PYTHON_VERSION }}
50
+
51
+ - name: Check lockfile is current
52
+ run: uv lock --check
53
+
54
+ - name: Install dependencies
55
+ run: uv sync --frozen --extra full --group test
56
+
57
+ - name: Run integration tests
58
+ run: uv run --frozen pytest -m integration
59
+
60
+ build:
61
+ name: Build package
62
+ runs-on: ubuntu-latest
63
+ needs: integration-tests
64
+ if: github.event_name == 'push' || inputs.build_package
65
+
66
+ steps:
67
+ - name: Checkout code
68
+ uses: actions/checkout@v6
69
+
70
+ - name: Set up uv
71
+ uses: astral-sh/setup-uv@v8.1.0
72
+ with:
73
+ version: ${{ env.UV_VERSION }}
74
+ enable-cache: true
75
+ cache-dependency-glob: "uv.lock"
76
+
77
+ - name: Set up Python
78
+ run: uv python install ${{ env.PYTHON_VERSION }}
79
+
80
+ - name: Check tag matches package version
81
+ if: github.event_name == 'push'
82
+ run: |
83
+ TAG_VERSION="${GITHUB_REF_NAME#v}"
84
+ PACKAGE_VERSION="$(uv run --no-sync python - <<'PY'
85
+ import tomllib
86
+ from pathlib import Path
87
+
88
+ pyproject = tomllib.loads(Path("pyproject.toml").read_text())
89
+ print(pyproject["project"]["version"])
90
+ PY
91
+ )"
92
+
93
+ echo "Tag version: ${TAG_VERSION}"
94
+ echo "Package version: ${PACKAGE_VERSION}"
95
+
96
+ test "${TAG_VERSION}" = "${PACKAGE_VERSION}"
97
+
98
+ - name: Check lockfile is current
99
+ run: uv lock --check
100
+
101
+ - name: Build package
102
+ run: uv build
103
+
104
+ - name: Check build artifacts
105
+ run: |
106
+ echo "Built files:"
107
+ ls -l dist/
108
+
109
+ - name: Check package metadata
110
+ run: uvx --from twine twine check dist/*
111
+
112
+ - name: Upload package distributions
113
+ uses: actions/upload-artifact@v6
114
+ with:
115
+ name: python-package-distributions
116
+ path: dist/*
117
+ if-no-files-found: error
118
+
119
+ publish:
120
+ name: Publish package to PyPI
121
+ runs-on: ubuntu-latest
122
+ needs: build
123
+ if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
124
+
125
+ environment:
126
+ name: pypi
127
+ url: https://pypi.org/p/tlmtc
128
+
129
+ permissions:
130
+ contents: read
131
+ id-token: write
132
+
133
+ steps:
134
+ - name: Download package distributions
135
+ uses: actions/download-artifact@v6
136
+ with:
137
+ name: python-package-distributions
138
+ path: dist/
139
+
140
+ - name: Publish package distributions to PyPI
141
+ uses: pypa/gh-action-pypi-publish@v1.14.0
tlmtc-0.1.0/.gitignore ADDED
@@ -0,0 +1,39 @@
1
+ # OS
2
+ .DS_Store
3
+ Thumbs.db
4
+
5
+ # Editor / IDE
6
+ .idea/
7
+ *.iml
8
+ .vscode/
9
+ *.swp
10
+ *.swo
11
+ *~
12
+
13
+ # Python bytecode
14
+ __pycache__/
15
+ *.pyc
16
+
17
+ # Virtual environments
18
+ .venv/
19
+ venv/
20
+ env/
21
+
22
+ # Build artifacts
23
+ build/
24
+ dist/
25
+ *.egg-info/
26
+ .eggs/
27
+
28
+ # Test / lint / type-check caches
29
+ .pytest_cache/
30
+ .mypy_cache/
31
+ .ruff_cache/
32
+ .coverage
33
+ htmlcov/
34
+
35
+ # Environment files
36
+ .env
37
+ .env.*
38
+ !.env.example
39
+ !.env.*.example
@@ -0,0 +1,102 @@
1
+ Thanks for your interest in contributing to **tlmtc**.
2
+
3
+ Contributions are welcome, including:
4
+
5
+ - asking questions about usage or design
6
+ - reporting bugs
7
+ - suggesting features or improvements
8
+ - improving documentation, examples, or error messages
9
+ - adding or improving tests
10
+ - contributing code
11
+
12
+ ## Before you start
13
+
14
+ ### Issue first, then PR
15
+
16
+ Unless your change is trivial, such as a typo correction or minor documentation improvement, please open an issue before submitting a pull request.
17
+
18
+ Opening an issue first helps avoid wasted work and keeps design decisions visible.
19
+
20
+ ### AI-assisted contributions
21
+
22
+ AI-assisted work is welcome when there is clear human ownership.
23
+
24
+ You may use AI tools to help draft, revise, explore, or implement contributions, but you are responsible for the final result. Before submitting, you must review every change, verify behavior against the codebase, run the relevant checks, and make sure the contribution matches the project style and intent.
25
+
26
+ Unreviewed AI-agent or bulk-generated contributions are not accepted. Please do not submit issues or pull requests that were generated autonomously, submitted at scale, or opened without careful human review and testing.
27
+
28
+ Pull requests that appear automated, low-effort, spam-like, or submitted without clear human ownership may be closed without review, regardless of how they were produced.
29
+
30
+ ### Issues
31
+
32
+ When reporting a bug, please include:
33
+
34
+ - what you expected to happen
35
+ - what actually happened
36
+ - a minimal example, if possible
37
+ - the relevant package version, Python version, and operating system
38
+ - the relevant error message or traceback, if applicable
39
+
40
+ When suggesting a feature, please describe:
41
+
42
+ - the use case
43
+ - why the current behavior is insufficient
44
+ - the expected behavior or API, if you have a concrete proposal
45
+
46
+ ### Pull requests
47
+
48
+ All changes must be submitted through pull requests.
49
+
50
+ Each pull request should represent one substantively coherent change. Large, mixed-scope pull requests may be closed or split before review.
51
+
52
+ A good pull request should include:
53
+
54
+ - a short summary of what changed and why the change is needed
55
+ - a scoped list of key changes
56
+ - tests, or an explanation of why tests were not added
57
+ - documentation updates when user-facing behavior changes
58
+ - notes on how the change was tested
59
+
60
+ ## Branches and commits
61
+
62
+ The `main` branch is protected. Direct commits to `main` by non-admins are not allowed.
63
+
64
+ Work should happen on short-lived, task-specific branches scoped to a single pull request.
65
+
66
+ Use simple branch names such as:
67
+
68
+ - `feature/short-description`
69
+ - `fix/short-description`
70
+ - `refactor/short-description`
71
+ - `docs/short-description`
72
+ - `tests/short-description`
73
+ - `ci/short-description`
74
+ - `chore/short-description`
75
+
76
+ Commits should follow a simple, consistent style:
77
+
78
+ - `feat: add new functionality`
79
+ - `fix: correct a bug`
80
+ - `refactor: restructure code without changing behavior`
81
+ - `docs: update documentation`
82
+ - `tests: add or adjust tests`
83
+ - `ci: update CI configuration`
84
+ - `chore: update maintenance files`
85
+
86
+ ## Tests and checks
87
+
88
+ Before opening a pull request, please run the relevant local checks: `ruff`, `mypy`, and `pytest`.
89
+
90
+ The project uses Python 3.12 or newer. We recommend using `uv` for local development. Install the project with the optional dependencies when working on training, prediction, or integration behavior.
91
+
92
+ When your change affects end-to-end training or prediction behavior, please also run the integration tests.
93
+
94
+ Not every pull request needs to run every expensive check locally, but pull requests should not knowingly rely on GitHub Actions to catch obvious failures.
95
+
96
+ ## Review and merge policy
97
+
98
+ Pull requests require passing CI checks and maintainer approval before merging.
99
+
100
+ Community review is welcome and may inform maintainer decisions, but final merge decisions are made by maintainers.
101
+
102
+ Pull requests are merged using squash merge.
tlmtc-0.1.0/LICENSE.md ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Sascha Göbel
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.