fmtr.tools 1.1.23__tar.gz → 1.1.25__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.

Potentially problematic release.


This version of fmtr.tools might be problematic. Click here for more details.

Files changed (79) hide show
  1. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/PKG-INFO +39 -39
  2. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/__init__.py +1 -1
  3. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/setup_tools/__init__.py +1 -1
  4. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/setup_tools/setup_tools.py +42 -39
  5. fmtr_tools-1.1.25/fmtr/tools/version +1 -0
  6. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr.tools.egg-info/PKG-INFO +39 -39
  7. fmtr_tools-1.1.23/fmtr/tools/version +0 -1
  8. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/LICENSE +0 -0
  9. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/README.md +0 -0
  10. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/ai_tools/__init__.py +0 -0
  11. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/ai_tools/agentic_tools.py +0 -0
  12. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/ai_tools/inference_tools.py +0 -0
  13. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/api_tools.py +0 -0
  14. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/async_tools.py +0 -0
  15. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/augmentation_tools.py +0 -0
  16. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/caching_tools.py +0 -0
  17. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/console_script_tools.py +0 -0
  18. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/constants.py +0 -0
  19. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/data_modelling_tools.py +0 -0
  20. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/dataclass_tools.py +0 -0
  21. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/datatype_tools.py +0 -0
  22. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/debugging_tools.py +0 -0
  23. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/dns_tools.py +0 -0
  24. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/docker_tools.py +0 -0
  25. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/environment_tools.py +0 -0
  26. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/function_tools.py +0 -0
  27. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/google_api_tools.py +0 -0
  28. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/hash_tools.py +0 -0
  29. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/hfh_tools.py +0 -0
  30. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/html_tools.py +0 -0
  31. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/import_tools.py +0 -0
  32. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/inspection_tools.py +0 -0
  33. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/interface_tools.py +0 -0
  34. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/iterator_tools.py +0 -0
  35. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/json_fix_tools.py +0 -0
  36. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/json_tools.py +0 -0
  37. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/logging_tools.py +0 -0
  38. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/merging_tools.py +0 -0
  39. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/metric_tools.py +0 -0
  40. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/name_tools.py +0 -0
  41. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/netrc_tools.py +0 -0
  42. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/openai_tools.py +0 -0
  43. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/packaging_tools.py +0 -0
  44. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/parallel_tools.py +0 -0
  45. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/path_tools/__init__.py +0 -0
  46. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/path_tools/app_path_tools.py +0 -0
  47. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/path_tools/path_tools.py +0 -0
  48. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/path_tools/type_path_tools.py +0 -0
  49. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/pattern_tools.py +0 -0
  50. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/pdf_tools.py +0 -0
  51. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/platform_tools.py +0 -0
  52. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/process_tools.py +0 -0
  53. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/profiling_tools.py +0 -0
  54. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/random_tools.py +0 -0
  55. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/semantic_tools.py +0 -0
  56. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/settings_tools.py +0 -0
  57. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/spaces_tools.py +0 -0
  58. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/string_tools.py +0 -0
  59. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/tabular_tools.py +0 -0
  60. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/tests/__init__.py +0 -0
  61. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/tests/conftest.py +0 -0
  62. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/tests/helpers.py +0 -0
  63. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/tests/test_datatype.py +0 -0
  64. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/tests/test_environment.py +0 -0
  65. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/tests/test_json.py +0 -0
  66. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/tests/test_path.py +0 -0
  67. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/tests/test_yaml.py +0 -0
  68. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/tokenization_tools.py +0 -0
  69. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/tools.py +0 -0
  70. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/unicode_tools.py +0 -0
  71. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/version_tools.py +0 -0
  72. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr/tools/yaml_tools.py +0 -0
  73. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr.tools.egg-info/SOURCES.txt +0 -0
  74. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr.tools.egg-info/dependency_links.txt +0 -0
  75. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr.tools.egg-info/entry_points.txt +0 -0
  76. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr.tools.egg-info/requires.txt +38 -38
  77. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/fmtr.tools.egg-info/top_level.txt +0 -0
  78. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/setup.cfg +0 -0
  79. {fmtr_tools-1.1.23 → fmtr_tools-1.1.25}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmtr.tools
3
- Version: 1.1.23
3
+ Version: 1.1.25
4
4
  Summary: Collection of high-level tools to simplify everyday development tasks, with a focus on AI/ML
5
5
  Home-page: https://github.com/fmtr/fmtr.tools
6
6
  Author: Frontmatter
@@ -9,60 +9,60 @@ License: Copyright © 2025 Frontmatter. All rights reserved.
9
9
  Description-Content-Type: text/markdown
10
10
  License-File: LICENSE
11
11
  Provides-Extra: test
12
- Requires-Dist: pytest-cov; extra == "test"
13
- Requires-Dist: yamlscript; extra == "test"
12
+ Requires-Dist: google-auth; extra == "test"
14
13
  Requires-Dist: pandas; extra == "test"
14
+ Requires-Dist: sre_yield; extra == "test"
15
+ Requires-Dist: semver; extra == "test"
16
+ Requires-Dist: dask[bag]; extra == "test"
17
+ Requires-Dist: torchaudio; extra == "test"
18
+ Requires-Dist: ollama; extra == "test"
19
+ Requires-Dist: sentence_transformers; extra == "test"
20
+ Requires-Dist: fastapi; extra == "test"
21
+ Requires-Dist: faker; extra == "test"
22
+ Requires-Dist: html2text; extra == "test"
23
+ Requires-Dist: pymupdf; extra == "test"
24
+ Requires-Dist: pydantic-ai[logfire,openai]; extra == "test"
25
+ Requires-Dist: uvicorn[standard]; extra == "test"
15
26
  Requires-Dist: regex; extra == "test"
16
27
  Requires-Dist: docker; extra == "test"
17
- Requires-Dist: json_repair; extra == "test"
18
- Requires-Dist: uvicorn[standard]; extra == "test"
19
- Requires-Dist: pymupdf; extra == "test"
20
- Requires-Dist: logfire[fastapi]; extra == "test"
21
28
  Requires-Dist: logfire[httpx]; extra == "test"
22
- Requires-Dist: pymupdf4llm; extra == "test"
23
- Requires-Dist: sentence_transformers; extra == "test"
24
- Requires-Dist: dnspython[doh]; extra == "test"
25
- Requires-Dist: fastapi; extra == "test"
26
- Requires-Dist: torchvision; extra == "test"
29
+ Requires-Dist: transformers[sentencepiece]; extra == "test"
30
+ Requires-Dist: bokeh; extra == "test"
31
+ Requires-Dist: tokenizers; extra == "test"
27
32
  Requires-Dist: httpx_retries; extra == "test"
28
- Requires-Dist: flet[all]; extra == "test"
33
+ Requires-Dist: huggingface_hub; extra == "test"
29
34
  Requires-Dist: pydantic-settings; extra == "test"
30
- Requires-Dist: ollama; extra == "test"
31
- Requires-Dist: diskcache; extra == "test"
32
- Requires-Dist: torchaudio; extra == "test"
33
- Requires-Dist: pydantic-ai[logfire,openai]; extra == "test"
34
- Requires-Dist: faker; extra == "test"
35
+ Requires-Dist: google-auth-oauthlib; extra == "test"
36
+ Requires-Dist: google-api-python-client; extra == "test"
35
37
  Requires-Dist: pydantic; extra == "test"
36
- Requires-Dist: distributed; extra == "test"
37
- Requires-Dist: dask[bag]; extra == "test"
38
- Requires-Dist: sre_yield; extra == "test"
39
38
  Requires-Dist: tabulate; extra == "test"
40
- Requires-Dist: html2text; extra == "test"
39
+ Requires-Dist: distributed; extra == "test"
40
+ Requires-Dist: logfire; extra == "test"
41
+ Requires-Dist: flet-webview; extra == "test"
41
42
  Requires-Dist: tinynetrc; extra == "test"
42
- Requires-Dist: setuptools; extra == "test"
43
+ Requires-Dist: deepmerge; extra == "test"
43
44
  Requires-Dist: pyyaml; extra == "test"
44
- Requires-Dist: openpyxl; extra == "test"
45
- Requires-Dist: flet-video; extra == "test"
46
- Requires-Dist: openai; extra == "test"
47
- Requires-Dist: flet-webview; extra == "test"
48
- Requires-Dist: pydevd-pycharm; extra == "test"
49
45
  Requires-Dist: contexttimer; extra == "test"
50
- Requires-Dist: google-auth; extra == "test"
51
- Requires-Dist: semver; extra == "test"
52
- Requires-Dist: huggingface_hub; extra == "test"
53
- Requires-Dist: tokenizers; extra == "test"
54
- Requires-Dist: peft; extra == "test"
55
- Requires-Dist: logfire; extra == "test"
56
- Requires-Dist: google-auth-oauthlib; extra == "test"
46
+ Requires-Dist: pytest-cov; extra == "test"
57
47
  Requires-Dist: filetype; extra == "test"
58
- Requires-Dist: deepmerge; extra == "test"
59
- Requires-Dist: google-api-python-client; extra == "test"
60
- Requires-Dist: bokeh; extra == "test"
48
+ Requires-Dist: setuptools; extra == "test"
49
+ Requires-Dist: flet[all]; extra == "test"
50
+ Requires-Dist: diskcache; extra == "test"
51
+ Requires-Dist: openpyxl; extra == "test"
52
+ Requires-Dist: dnspython[doh]; extra == "test"
53
+ Requires-Dist: openai; extra == "test"
54
+ Requires-Dist: logfire[fastapi]; extra == "test"
61
55
  Requires-Dist: httpx; extra == "test"
56
+ Requires-Dist: yamlscript; extra == "test"
57
+ Requires-Dist: pydevd-pycharm; extra == "test"
62
58
  Requires-Dist: google-auth-httplib2; extra == "test"
63
59
  Requires-Dist: appdirs; extra == "test"
64
60
  Requires-Dist: Unidecode; extra == "test"
65
- Requires-Dist: transformers[sentencepiece]; extra == "test"
61
+ Requires-Dist: flet-video; extra == "test"
62
+ Requires-Dist: pymupdf4llm; extra == "test"
63
+ Requires-Dist: json_repair; extra == "test"
64
+ Requires-Dist: torchvision; extra == "test"
65
+ Requires-Dist: peft; extra == "test"
66
66
  Provides-Extra: yaml
67
67
  Requires-Dist: yamlscript; extra == "yaml"
68
68
  Requires-Dist: pyyaml; extra == "yaml"
@@ -31,7 +31,7 @@ from fmtr.tools.path_tools import Path, PackagePaths, AppPaths
31
31
  from fmtr.tools import ai_tools as ai
32
32
 
33
33
  import fmtr.tools.setup_tools as setup
34
- from fmtr.tools.setup_tools import Setup, SetupPaths, Dependencies
34
+ from fmtr.tools.setup_tools import Setup, SetupPaths, Dependencies, Tools
35
35
 
36
36
  try:
37
37
  from fmtr.tools import augmentation_tools as augmentation
@@ -1,6 +1,6 @@
1
1
  from fmtr.tools.import_tools import MissingExtraMockModule
2
2
 
3
- from fmtr.tools.setup_tools.setup_tools import Setup, SetupPaths, Dependencies
3
+ from fmtr.tools.setup_tools.setup_tools import Setup, SetupPaths, Dependencies, Tools
4
4
 
5
5
  try:
6
6
  from setuptools import find_namespace_packages, find_packages, setup as setup_setuptools
@@ -1,6 +1,5 @@
1
1
  import sys
2
2
  from datetime import datetime
3
- from fnmatch import fnmatch
4
3
  from functools import cached_property
5
4
  from itertools import chain
6
5
  from typing import List, Dict
@@ -17,9 +16,7 @@ class SetupPaths(FromCallerMixin):
17
16
 
18
17
  """
19
18
 
20
- SKIP_DIRS = {'data', 'build', 'dist', '.*', '*egg-info*'}
21
-
22
- def __init__(self, path=None):
19
+ def __init__(self, path=None, org=Constants.ORG_NAME):
23
20
 
24
21
  """
25
22
 
@@ -29,15 +26,9 @@ class SetupPaths(FromCallerMixin):
29
26
  if not path:
30
27
  path = self.from_caller()
31
28
 
29
+ self.org_name = org
32
30
  self.repo = Path(path)
33
31
 
34
- @property
35
- def path(self):
36
- if self.is_namespace:
37
- return self.repo / self.org / self.name
38
- else:
39
- return self.repo / self.name
40
-
41
32
  @property
42
33
  def readme(self):
43
34
  return self.repo / 'README.md'
@@ -47,41 +38,40 @@ class SetupPaths(FromCallerMixin):
47
38
  return self.path / Constants.FILENAME_VERSION
48
39
 
49
40
  @cached_property
50
- def layout(self):
41
+ def path(self):
42
+
43
+ from fmtr.tools import setup
44
+
45
+ if self.org:
46
+ base = self.org
47
+ else:
48
+ base = self.repo
51
49
 
52
- directories = [
53
- dir for dir in self.repo.iterdir()
54
- if dir.is_dir()
55
- and not any(fnmatch(dir.name, pattern) for pattern in self.SKIP_DIRS)
56
- ]
50
+ directories = [base / dir for dir in setup.find_packages(base)]
57
51
 
58
52
  if len(directories) != 1:
59
53
  dirs_str = ', '.join([str(dir) for dir in directories])
60
54
  raise ValueError(f'Expected exactly one directory in {self.repo}, found {dirs_str}')
61
55
 
62
- target = next(iter(directories))
63
-
64
- contents = list(target.iterdir())
65
- if len(contents) == 1 and (item := next(iter(contents))).is_dir():
66
- return True, target.name, item.name
67
-
68
- else:
69
- return False, None, target.name
56
+ package = next(iter(directories))
57
+ return package
70
58
 
71
59
  @property
72
- def is_namespace(self) -> str:
73
- is_namespace, org, name = self.layout
74
- return is_namespace
60
+ def org(self):
61
+ if not self.org_name:
62
+ return False
63
+ org = self.repo / self.org_name
64
+ if not org.is_dir():
65
+ return False
66
+ return org
75
67
 
76
68
  @property
77
- def org(self) -> str:
78
- is_namespace, org, name = self.layout
79
- return org
69
+ def is_namespace(self) -> bool:
70
+ return bool(self.org)
80
71
 
81
72
  @property
82
73
  def name(self) -> str:
83
- is_namespace, org, name = self.layout
84
- return name
74
+ return self.path.stem
85
75
 
86
76
 
87
77
  class Setup(FromCallerMixin):
@@ -89,9 +79,9 @@ class Setup(FromCallerMixin):
89
79
  AUTHOR_EMAIL = 'innovative.fowler@mask.pro.fmtr.dev'
90
80
 
91
81
  REQUIREMENTS_ARG = 'requirements'
82
+ SKIP_DIRS = {'data', 'build', 'dist', '.*', '*egg-info*'}
92
83
 
93
-
94
- def __init__(self, dependencies, paths=None, console_scripts=None, client=None, do_setup=True, **kwargs):
84
+ def __init__(self, dependencies, paths=None, org=Constants.ORG_NAME, console_scripts=None, client=None, do_setup=True, **kwargs):
95
85
 
96
86
  self.kwargs = kwargs
97
87
 
@@ -105,8 +95,10 @@ class Setup(FromCallerMixin):
105
95
  self.print_requirements()
106
96
  return
107
97
 
98
+ self.org = org
99
+
108
100
  if not paths:
109
- paths = SetupPaths(path=self.from_caller())
101
+ paths = SetupPaths(path=self.from_caller(), org=self.org)
110
102
  self.paths = paths
111
103
 
112
104
  self.client = client
@@ -189,7 +181,7 @@ class Setup(FromCallerMixin):
189
181
  @property
190
182
  def packages(self):
191
183
 
192
- excludes = list(SetupPaths.SKIP_DIRS) + [f'{name}.*' for name in SetupPaths.SKIP_DIRS]
184
+ excludes = list(self.SKIP_DIRS) + [f'{name}.*' for name in self.SKIP_DIRS if '*' not in name]
193
185
 
194
186
  packages = self.find(where=str(self.paths.repo), exclude=excludes)
195
187
  return packages
@@ -211,7 +203,7 @@ class Setup(FromCallerMixin):
211
203
 
212
204
  @property
213
205
  def data(self):
214
- return dict(
206
+ data = dict(
215
207
  name=self.name,
216
208
  version=self.version,
217
209
  author=self.author,
@@ -227,6 +219,7 @@ class Setup(FromCallerMixin):
227
219
  install_requires=self.dependencies.install,
228
220
  extras_require=self.dependencies.extras,
229
221
  ) | self.kwargs
222
+ return data
230
223
 
231
224
  def setup(self):
232
225
 
@@ -235,6 +228,16 @@ class Setup(FromCallerMixin):
235
228
  return setup.setup_setuptools(**self.data)
236
229
 
237
230
 
231
+ class Tools:
232
+ MASK = f'{Constants.LIBRARY_NAME}[{{extras}}]'
233
+
234
+ def __init__(self, *extras):
235
+ self.extras = extras
236
+
237
+ def __str__(self):
238
+ extras_str = ','.join(self.extras)
239
+ return self.MASK.format(extras=extras_str)
240
+
238
241
 
239
242
 
240
243
  class Dependencies:
@@ -256,7 +259,7 @@ class Dependencies:
256
259
  for value in values:
257
260
  if value == key or value not in self.dependencies:
258
261
  # Add the value directly if it references itself or is not a dependency key.
259
- values_resolved.append(value)
262
+ values_resolved.append(str(value))
260
263
  else:
261
264
  # Recurse into nested dependencies.
262
265
  values_resolved += self.resolve_values(value)
@@ -0,0 +1 @@
1
+ 1.1.25
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmtr.tools
3
- Version: 1.1.23
3
+ Version: 1.1.25
4
4
  Summary: Collection of high-level tools to simplify everyday development tasks, with a focus on AI/ML
5
5
  Home-page: https://github.com/fmtr/fmtr.tools
6
6
  Author: Frontmatter
@@ -9,60 +9,60 @@ License: Copyright © 2025 Frontmatter. All rights reserved.
9
9
  Description-Content-Type: text/markdown
10
10
  License-File: LICENSE
11
11
  Provides-Extra: test
12
- Requires-Dist: pytest-cov; extra == "test"
13
- Requires-Dist: yamlscript; extra == "test"
12
+ Requires-Dist: google-auth; extra == "test"
14
13
  Requires-Dist: pandas; extra == "test"
14
+ Requires-Dist: sre_yield; extra == "test"
15
+ Requires-Dist: semver; extra == "test"
16
+ Requires-Dist: dask[bag]; extra == "test"
17
+ Requires-Dist: torchaudio; extra == "test"
18
+ Requires-Dist: ollama; extra == "test"
19
+ Requires-Dist: sentence_transformers; extra == "test"
20
+ Requires-Dist: fastapi; extra == "test"
21
+ Requires-Dist: faker; extra == "test"
22
+ Requires-Dist: html2text; extra == "test"
23
+ Requires-Dist: pymupdf; extra == "test"
24
+ Requires-Dist: pydantic-ai[logfire,openai]; extra == "test"
25
+ Requires-Dist: uvicorn[standard]; extra == "test"
15
26
  Requires-Dist: regex; extra == "test"
16
27
  Requires-Dist: docker; extra == "test"
17
- Requires-Dist: json_repair; extra == "test"
18
- Requires-Dist: uvicorn[standard]; extra == "test"
19
- Requires-Dist: pymupdf; extra == "test"
20
- Requires-Dist: logfire[fastapi]; extra == "test"
21
28
  Requires-Dist: logfire[httpx]; extra == "test"
22
- Requires-Dist: pymupdf4llm; extra == "test"
23
- Requires-Dist: sentence_transformers; extra == "test"
24
- Requires-Dist: dnspython[doh]; extra == "test"
25
- Requires-Dist: fastapi; extra == "test"
26
- Requires-Dist: torchvision; extra == "test"
29
+ Requires-Dist: transformers[sentencepiece]; extra == "test"
30
+ Requires-Dist: bokeh; extra == "test"
31
+ Requires-Dist: tokenizers; extra == "test"
27
32
  Requires-Dist: httpx_retries; extra == "test"
28
- Requires-Dist: flet[all]; extra == "test"
33
+ Requires-Dist: huggingface_hub; extra == "test"
29
34
  Requires-Dist: pydantic-settings; extra == "test"
30
- Requires-Dist: ollama; extra == "test"
31
- Requires-Dist: diskcache; extra == "test"
32
- Requires-Dist: torchaudio; extra == "test"
33
- Requires-Dist: pydantic-ai[logfire,openai]; extra == "test"
34
- Requires-Dist: faker; extra == "test"
35
+ Requires-Dist: google-auth-oauthlib; extra == "test"
36
+ Requires-Dist: google-api-python-client; extra == "test"
35
37
  Requires-Dist: pydantic; extra == "test"
36
- Requires-Dist: distributed; extra == "test"
37
- Requires-Dist: dask[bag]; extra == "test"
38
- Requires-Dist: sre_yield; extra == "test"
39
38
  Requires-Dist: tabulate; extra == "test"
40
- Requires-Dist: html2text; extra == "test"
39
+ Requires-Dist: distributed; extra == "test"
40
+ Requires-Dist: logfire; extra == "test"
41
+ Requires-Dist: flet-webview; extra == "test"
41
42
  Requires-Dist: tinynetrc; extra == "test"
42
- Requires-Dist: setuptools; extra == "test"
43
+ Requires-Dist: deepmerge; extra == "test"
43
44
  Requires-Dist: pyyaml; extra == "test"
44
- Requires-Dist: openpyxl; extra == "test"
45
- Requires-Dist: flet-video; extra == "test"
46
- Requires-Dist: openai; extra == "test"
47
- Requires-Dist: flet-webview; extra == "test"
48
- Requires-Dist: pydevd-pycharm; extra == "test"
49
45
  Requires-Dist: contexttimer; extra == "test"
50
- Requires-Dist: google-auth; extra == "test"
51
- Requires-Dist: semver; extra == "test"
52
- Requires-Dist: huggingface_hub; extra == "test"
53
- Requires-Dist: tokenizers; extra == "test"
54
- Requires-Dist: peft; extra == "test"
55
- Requires-Dist: logfire; extra == "test"
56
- Requires-Dist: google-auth-oauthlib; extra == "test"
46
+ Requires-Dist: pytest-cov; extra == "test"
57
47
  Requires-Dist: filetype; extra == "test"
58
- Requires-Dist: deepmerge; extra == "test"
59
- Requires-Dist: google-api-python-client; extra == "test"
60
- Requires-Dist: bokeh; extra == "test"
48
+ Requires-Dist: setuptools; extra == "test"
49
+ Requires-Dist: flet[all]; extra == "test"
50
+ Requires-Dist: diskcache; extra == "test"
51
+ Requires-Dist: openpyxl; extra == "test"
52
+ Requires-Dist: dnspython[doh]; extra == "test"
53
+ Requires-Dist: openai; extra == "test"
54
+ Requires-Dist: logfire[fastapi]; extra == "test"
61
55
  Requires-Dist: httpx; extra == "test"
56
+ Requires-Dist: yamlscript; extra == "test"
57
+ Requires-Dist: pydevd-pycharm; extra == "test"
62
58
  Requires-Dist: google-auth-httplib2; extra == "test"
63
59
  Requires-Dist: appdirs; extra == "test"
64
60
  Requires-Dist: Unidecode; extra == "test"
65
- Requires-Dist: transformers[sentencepiece]; extra == "test"
61
+ Requires-Dist: flet-video; extra == "test"
62
+ Requires-Dist: pymupdf4llm; extra == "test"
63
+ Requires-Dist: json_repair; extra == "test"
64
+ Requires-Dist: torchvision; extra == "test"
65
+ Requires-Dist: peft; extra == "test"
66
66
  Provides-Extra: yaml
67
67
  Requires-Dist: yamlscript; extra == "yaml"
68
68
  Requires-Dist: pyyaml; extra == "yaml"
@@ -1 +0,0 @@
1
- 1.1.23
File without changes
File without changes
@@ -135,60 +135,60 @@ tabulate
135
135
  openpyxl
136
136
 
137
137
  [test]
138
- pytest-cov
139
- yamlscript
138
+ google-auth
140
139
  pandas
140
+ sre_yield
141
+ semver
142
+ dask[bag]
143
+ torchaudio
144
+ ollama
145
+ sentence_transformers
146
+ fastapi
147
+ faker
148
+ html2text
149
+ pymupdf
150
+ pydantic-ai[logfire,openai]
151
+ uvicorn[standard]
141
152
  regex
142
153
  docker
143
- json_repair
144
- uvicorn[standard]
145
- pymupdf
146
- logfire[fastapi]
147
154
  logfire[httpx]
148
- pymupdf4llm
149
- sentence_transformers
150
- dnspython[doh]
151
- fastapi
152
- torchvision
155
+ transformers[sentencepiece]
156
+ bokeh
157
+ tokenizers
153
158
  httpx_retries
154
- flet[all]
159
+ huggingface_hub
155
160
  pydantic-settings
156
- ollama
157
- diskcache
158
- torchaudio
159
- pydantic-ai[logfire,openai]
160
- faker
161
+ google-auth-oauthlib
162
+ google-api-python-client
161
163
  pydantic
162
- distributed
163
- dask[bag]
164
- sre_yield
165
164
  tabulate
166
- html2text
165
+ distributed
166
+ logfire
167
+ flet-webview
167
168
  tinynetrc
168
- setuptools
169
+ deepmerge
169
170
  pyyaml
170
- openpyxl
171
- flet-video
172
- openai
173
- flet-webview
174
- pydevd-pycharm
175
171
  contexttimer
176
- google-auth
177
- semver
178
- huggingface_hub
179
- tokenizers
180
- peft
181
- logfire
182
- google-auth-oauthlib
172
+ pytest-cov
183
173
  filetype
184
- deepmerge
185
- google-api-python-client
186
- bokeh
174
+ setuptools
175
+ flet[all]
176
+ diskcache
177
+ openpyxl
178
+ dnspython[doh]
179
+ openai
180
+ logfire[fastapi]
187
181
  httpx
182
+ yamlscript
183
+ pydevd-pycharm
188
184
  google-auth-httplib2
189
185
  appdirs
190
186
  Unidecode
191
- transformers[sentencepiece]
187
+ flet-video
188
+ pymupdf4llm
189
+ json_repair
190
+ torchvision
191
+ peft
192
192
 
193
193
  [tokenization]
194
194
  tokenizers
File without changes
File without changes