paramflow 0.3.2__tar.gz → 0.3.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 (31) hide show
  1. {paramflow-0.3.2/paramflow.egg-info → paramflow-0.3.3}/PKG-INFO +1 -1
  2. paramflow-0.3.3/paramflow/__pycache__/convert.cpython-313.pyc +0 -0
  3. {paramflow-0.3.2 → paramflow-0.3.3}/paramflow/__pycache__/params.cpython-313.pyc +0 -0
  4. paramflow-0.3.3/paramflow/__pycache__/parser.cpython-313.pyc +0 -0
  5. {paramflow-0.3.2 → paramflow-0.3.3}/paramflow/convert.py +15 -0
  6. {paramflow-0.3.2 → paramflow-0.3.3}/paramflow/params.py +3 -2
  7. {paramflow-0.3.2 → paramflow-0.3.3}/paramflow/parser.py +15 -2
  8. {paramflow-0.3.2 → paramflow-0.3.3/paramflow.egg-info}/PKG-INFO +1 -1
  9. {paramflow-0.3.2 → paramflow-0.3.3}/setup.py +1 -1
  10. paramflow-0.3.2/paramflow/__pycache__/convert.cpython-313.pyc +0 -0
  11. paramflow-0.3.2/paramflow/__pycache__/parser.cpython-313.pyc +0 -0
  12. {paramflow-0.3.2 → paramflow-0.3.3}/LICENSE +0 -0
  13. {paramflow-0.3.2 → paramflow-0.3.3}/MANIFEST.in +0 -0
  14. {paramflow-0.3.2 → paramflow-0.3.3}/README.md +0 -0
  15. {paramflow-0.3.2 → paramflow-0.3.3}/paramflow/__init__.py +0 -0
  16. {paramflow-0.3.2 → paramflow-0.3.3}/paramflow/__pycache__/__init__.cpython-312.pyc +0 -0
  17. {paramflow-0.3.2 → paramflow-0.3.3}/paramflow/__pycache__/__init__.cpython-313.pyc +0 -0
  18. {paramflow-0.3.2 → paramflow-0.3.3}/paramflow/__pycache__/convert.cpython-312.pyc +0 -0
  19. {paramflow-0.3.2 → paramflow-0.3.3}/paramflow/__pycache__/frozen.cpython-312.pyc +0 -0
  20. {paramflow-0.3.2 → paramflow-0.3.3}/paramflow/__pycache__/frozen.cpython-313.pyc +0 -0
  21. {paramflow-0.3.2 → paramflow-0.3.3}/paramflow/__pycache__/frozen_test.cpython-312-pytest-8.3.4.pyc +0 -0
  22. {paramflow-0.3.2 → paramflow-0.3.3}/paramflow/__pycache__/params.cpython-312.pyc +0 -0
  23. {paramflow-0.3.2 → paramflow-0.3.3}/paramflow/__pycache__/params_test.cpython-312-pytest-8.3.4.pyc +0 -0
  24. {paramflow-0.3.2 → paramflow-0.3.3}/paramflow/__pycache__/parser.cpython-312.pyc +0 -0
  25. {paramflow-0.3.2 → paramflow-0.3.3}/paramflow/frozen.py +0 -0
  26. {paramflow-0.3.2 → paramflow-0.3.3}/paramflow.egg-info/SOURCES.txt +0 -0
  27. {paramflow-0.3.2 → paramflow-0.3.3}/paramflow.egg-info/dependency_links.txt +0 -0
  28. {paramflow-0.3.2 → paramflow-0.3.3}/paramflow.egg-info/requires.txt +0 -0
  29. {paramflow-0.3.2 → paramflow-0.3.3}/paramflow.egg-info/top_level.txt +0 -0
  30. {paramflow-0.3.2 → paramflow-0.3.3}/pyproject.toml +0 -0
  31. {paramflow-0.3.2 → paramflow-0.3.3}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: paramflow
3
- Version: 0.3.2
3
+ Version: 0.3.3
4
4
  Summary: A lightweight library for hyperparameter and configuration management
5
5
  Home-page: https://github.com/mduszyk/paramflow
6
6
  Classifier: Programming Language :: Python :: 3
@@ -33,3 +33,18 @@ def convert_type(dst_value, src_value, path=''):
33
33
  if path != '':
34
34
  path += ' '
35
35
  raise TypeError(f'unable to convert {path}{src_type} to {dst_type}') from e
36
+
37
+
38
+ def infer_type(value: str):
39
+ result = value
40
+ if '.' in value:
41
+ try:
42
+ result = float(value)
43
+ except ValueError:
44
+ pass
45
+ else:
46
+ try:
47
+ result = int(value)
48
+ except ValueError:
49
+ pass
50
+ return result
@@ -23,7 +23,7 @@ def load(*sources: Tuple[str, ...],
23
23
  """
24
24
  Load parameters form multiple sources, layer them on top of each other and activate profile.
25
25
  Activation of profile means learying it on top of the default profile.
26
- :param source: file or multiple files to load parameters from
26
+ :param sources: file or multiple files to load parameters from
27
27
  :param meta_env_prefix: prefix for env vars that are used to overwrite meta params
28
28
  :param meta_args_prefix: prefix for command-line arguments to overwrite meta params
29
29
  :param env_prefix: prefix for env vars that are used to overwrite params, if None disable auto adding env source
@@ -44,7 +44,8 @@ def load(*sources: Tuple[str, ...],
44
44
  '__source__': ['pf.load'],
45
45
  }
46
46
  meta_env_parser = EnvParser(meta_env_prefix, 'default')
47
- meta_args_parser = ArgsParser(meta_args_prefix, 'default', no_exit=True, descr='Meta-parameters')
47
+ meta_args_parser = ArgsParser(meta_args_prefix, 'default',
48
+ no_exit=True, consume_args=True, descr='Meta-parameters')
48
49
  meta = deep_merge(meta, meta_env_parser(meta))
49
50
  meta = deep_merge(meta, meta_args_parser(meta))
50
51
  meta = freeze(meta)
@@ -2,11 +2,14 @@ import argparse
2
2
  import configparser
3
3
  import json
4
4
  import os
5
+ import sys
5
6
  from abc import ABC, abstractmethod
6
7
  from typing import Dict, Final, Type
7
8
 
8
9
  import yaml
9
10
 
11
+ from paramflow.convert import infer_type
12
+
10
13
 
11
14
  class Parser(ABC):
12
15
  @abstractmethod
@@ -131,12 +134,13 @@ class NoExitArgumentParser(argparse.ArgumentParser):
131
134
  class ArgsParser(Parser):
132
135
 
133
136
  def __init__(self, prefix: str, default_profile: str, target_profile: str = None,
134
- no_exit: bool = False, descr: str = None):
137
+ no_exit: bool = False, descr: str = None, consume_args: bool = False):
135
138
  self.prefix = prefix
136
139
  self.default_profile = default_profile
137
140
  self.target_profile = target_profile
138
141
  self.no_exit = no_exit
139
142
  self.descr = descr
143
+ self.consume_args = consume_args
140
144
 
141
145
  def __call__(self, params: Dict[str, any]) -> Dict[str, any]:
142
146
  if self.target_profile is None and self.default_profile in params:
@@ -151,12 +155,21 @@ class ArgsParser(Parser):
151
155
  if typ is dict or typ is list or typ is bool or typ is tuple or value is None:
152
156
  typ = str
153
157
  parser.add_argument(f'--{self.prefix}{key}', type=typ, default=None, help=f'{key} = {value}')
154
- args, _ = parser.parse_known_args()
158
+ args, remaining = parser.parse_known_args()
155
159
  args_params = {}
156
160
  for arg_key, arg_value in args.__dict__.items():
157
161
  if arg_value is not None:
158
162
  key = arg_key.replace(self.prefix, '')
159
163
  args_params[key] = arg_value
164
+
165
+ if self.consume_args:
166
+ sys.argv = [sys.argv[0]] + remaining
167
+ else:
168
+ it = iter(remaining)
169
+ for arg_name, arg_value in zip(it, it):
170
+ key = arg_name.replace('--', '').replace(self.prefix, '')
171
+ args_params[key] = infer_type(arg_value)
172
+
160
173
  result = args_params
161
174
  if len(args_params) > 0:
162
175
  if self.target_profile is not None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: paramflow
3
- Version: 0.3.2
3
+ Version: 0.3.3
4
4
  Summary: A lightweight library for hyperparameter and configuration management
5
5
  Home-page: https://github.com/mduszyk/paramflow
6
6
  Classifier: Programming Language :: Python :: 3
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name='paramflow',
5
- version='0.3.2',
5
+ version='0.3.3',
6
6
  description='A lightweight library for hyperparameter and configuration management',
7
7
  packages=find_packages(),
8
8
  install_requires=[
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes