lsst-pex-config 30.0.0rc2__py3-none-any.whl → 30.0.1rc1__py3-none-any.whl

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 (25) hide show
  1. lsst/pex/config/callStack.py +1 -1
  2. lsst/pex/config/choiceField.py +3 -3
  3. lsst/pex/config/comparison.py +5 -5
  4. lsst/pex/config/config.py +130 -37
  5. lsst/pex/config/configChoiceField.py +4 -4
  6. lsst/pex/config/configDictField.py +6 -6
  7. lsst/pex/config/configField.py +6 -6
  8. lsst/pex/config/configurableActions/_configurableActionStructField.py +1 -1
  9. lsst/pex/config/configurableField.py +7 -7
  10. lsst/pex/config/dictField.py +6 -6
  11. lsst/pex/config/listField.py +10 -10
  12. lsst/pex/config/rangeField.py +2 -2
  13. lsst/pex/config/registry.py +4 -4
  14. lsst/pex/config/version.py +1 -1
  15. lsst/pex/config/wrap.py +4 -4
  16. {lsst_pex_config-30.0.0rc2.dist-info → lsst_pex_config-30.0.1rc1.dist-info}/METADATA +5 -3
  17. lsst_pex_config-30.0.1rc1.dist-info/RECORD +35 -0
  18. {lsst_pex_config-30.0.0rc2.dist-info → lsst_pex_config-30.0.1rc1.dist-info}/WHEEL +1 -1
  19. lsst_pex_config-30.0.0rc2.dist-info/RECORD +0 -35
  20. {lsst_pex_config-30.0.0rc2.dist-info → lsst_pex_config-30.0.1rc1.dist-info}/licenses/COPYRIGHT +0 -0
  21. {lsst_pex_config-30.0.0rc2.dist-info → lsst_pex_config-30.0.1rc1.dist-info}/licenses/LICENSE +0 -0
  22. {lsst_pex_config-30.0.0rc2.dist-info → lsst_pex_config-30.0.1rc1.dist-info}/licenses/bsd_license.txt +0 -0
  23. {lsst_pex_config-30.0.0rc2.dist-info → lsst_pex_config-30.0.1rc1.dist-info}/licenses/gpl-v3.0.txt +0 -0
  24. {lsst_pex_config-30.0.0rc2.dist-info → lsst_pex_config-30.0.1rc1.dist-info}/top_level.txt +0 -0
  25. {lsst_pex_config-30.0.0rc2.dist-info → lsst_pex_config-30.0.1rc1.dist-info}/zip-safe +0 -0
@@ -102,7 +102,7 @@ class StackFrame:
102
102
  getStackFrame
103
103
  """
104
104
 
105
- _STRIP = "/python/lsst/"
105
+ _STRIP = "/python/"
106
106
  """String to strip from the ``filename`` in the constructor."""
107
107
 
108
108
  def __init__(self, filename, lineno, function, content=None):
@@ -42,7 +42,7 @@ class ChoiceField(Field[FieldTypeVar]):
42
42
  ----------
43
43
  doc : `str`
44
44
  Documentation string that describes the configuration field.
45
- dtype : class
45
+ dtype : `type`
46
46
  The type of the field's choices. For example, `str` or `int`.
47
47
  allowed : `dict`
48
48
  The allowed values. Keys are the allowed choices (of ``dtype``-type).
@@ -52,9 +52,9 @@ class ChoiceField(Field[FieldTypeVar]):
52
52
  choices.
53
53
  optional : `bool`, optional
54
54
  If `True`, this configuration field is *optional*. Default is `True`.
55
- deprecated : None or `str`, optional
55
+ deprecated : `None` or `str`, optional
56
56
  A description of why this Field is deprecated, including removal date.
57
- If not None, the string is appended to the docstring for this Field.
57
+ If not `None`, the string is appended to the docstring for this Field.
58
58
 
59
59
  See Also
60
60
  --------
@@ -70,18 +70,18 @@ def compareScalars(name, v1, v2, output, rtol=1e-8, atol=1e-8, dtype=None):
70
70
  Name to use when reporting differences, typically created by
71
71
  `getComparisonName`. This will always appear as the beginning of any
72
72
  messages reported via ``output``.
73
- v1 : object
73
+ v1 : `object`
74
74
  Left-hand side value to compare.
75
- v2 : object
75
+ v2 : `object`
76
76
  Right-hand side value to compare.
77
- output : callable or `None`
77
+ output : `collections.abc.Callable` or `None`
78
78
  A callable that takes a string, used (possibly repeatedly) to report
79
79
  inequalities (for example, `print`). Set to `None` to disable output.
80
80
  rtol : `float`, optional
81
81
  Relative tolerance for floating point comparisons.
82
82
  atol : `float`, optional
83
83
  Absolute tolerance for floating point comparisons.
84
- dtype : class, optional
84
+ dtype : `type`, optional
85
85
  Data type of values for comparison. May be `None` if values are not
86
86
  floating-point.
87
87
 
@@ -130,7 +130,7 @@ def compareConfigs(name, c1, c2, shortcut=True, rtol=1e-8, atol=1e-8, output=Non
130
130
  Relative tolerance for floating point comparisons.
131
131
  atol : `float`, optional
132
132
  Absolute tolerance for floating point comparisons.
133
- output : callable, optional
133
+ output : `collections.abc.Callable`, optional
134
134
  A callable that takes a string, used (possibly repeatedly) to report
135
135
  inequalities. For example: `print`.
136
136
 
lsst/pex/config/config.py CHANGED
@@ -38,6 +38,7 @@ __all__ = (
38
38
  import copy
39
39
  import importlib
40
40
  import io
41
+ import logging
41
42
  import math
42
43
  import numbers
43
44
  import os
@@ -47,9 +48,13 @@ import sys
47
48
  import tempfile
48
49
  import warnings
49
50
  from collections.abc import Mapping
51
+ from contextlib import contextmanager
52
+ from contextvars import ContextVar
50
53
  from types import GenericAlias
51
54
  from typing import Any, ForwardRef, Generic, TypeVar, cast, overload
52
55
 
56
+ from lsst.resources import ResourcePath, ResourcePathExpression
57
+
53
58
  # if YAML is not available that's fine and we simply don't register
54
59
  # the yaml representer since we know it won't be used.
55
60
  try:
@@ -74,6 +79,25 @@ else:
74
79
  YamlLoaders = ()
75
80
  doImport = None
76
81
 
82
+ _LOG = logging.getLogger(__name__)
83
+
84
+
85
+ # Tracks the current config directory for the current context.
86
+ _config_dir_stack: ContextVar[ResourcePath | None] = ContextVar("_config_dir_stack", default=None)
87
+
88
+
89
+ def _get_config_root() -> ResourcePath | None:
90
+ return _config_dir_stack.get()
91
+
92
+
93
+ @contextmanager
94
+ def _push_config_root(dirname: ResourcePath):
95
+ token = _config_dir_stack.set(dirname)
96
+ try:
97
+ yield
98
+ finally:
99
+ _config_dir_stack.reset(token)
100
+
77
101
 
78
102
  class _PexConfigGenericAlias(GenericAlias):
79
103
  """A Subclass of python's GenericAlias used in defining and instantiating
@@ -124,14 +148,14 @@ def _autocast(x, dtype):
124
148
 
125
149
  Parameters
126
150
  ----------
127
- x : object
151
+ x : `object`
128
152
  A value.
129
153
  dtype : type
130
154
  Data type, such as `float`, `int`, or `str`.
131
155
 
132
156
  Returns
133
157
  -------
134
- values : object
158
+ values : `object`
135
159
  If appropriate, the returned value is ``x`` cast to the given type
136
160
  ``dtype``. If the cast cannot be performed the original value of
137
161
  ``x`` is returned.
@@ -276,7 +300,7 @@ class FieldValidationError(ValueError):
276
300
 
277
301
  See also
278
302
  --------
279
- lsst.pex.config.Field.name
303
+ ``lsst.pex.config.Field.name``
280
304
  """
281
305
 
282
306
  self.fullname = _joinNamePath(config._name, field.name)
@@ -297,7 +321,7 @@ class FieldValidationError(ValueError):
297
321
  error = (
298
322
  f"{self.fieldType.__name__} '{self.fullname}' failed validation: {msg}\n"
299
323
  f"For more information see the Field definition at:\n{self.fieldSource.format()}"
300
- f" and the Config definition at:\n{self.configSource.format()}"
324
+ f" and the Config definition for {_typeStr(config)} at:\n{self.configSource.format()}"
301
325
  )
302
326
  super().__init__(error)
303
327
 
@@ -310,14 +334,14 @@ class Field(Generic[FieldTypeVar]):
310
334
  ----------
311
335
  doc : `str`
312
336
  A description of the field for users.
313
- dtype : type, optional
337
+ dtype : `type`, optional
314
338
  The field's data type. ``Field`` only supports basic data types:
315
339
  `int`, `float`, `complex`, `bool`, and `str`. See
316
340
  `Field.supportedTypes`. Optional if supplied as a typing argument to
317
341
  the class.
318
- default : object, optional
342
+ default : `object`, optional
319
343
  The field's default value.
320
- check : callable, optional
344
+ check : `collections.abc.Callable`, optional
321
345
  A callable that is called with the field's value. This callable should
322
346
  return `False` if the value is invalid. More complex inter-field
323
347
  validation can be written as part of the
@@ -326,7 +350,7 @@ class Field(Generic[FieldTypeVar]):
326
350
  This sets whether the field is considered optional, and therefore
327
351
  doesn't need to be set by the user. When `False`,
328
352
  `lsst.pex.config.Config.validate` fails if the field's value is `None`.
329
- deprecated : None or `str`, optional
353
+ deprecated : `None` or `str`, optional
330
354
  A description of why this Field is deprecated, including removal date.
331
355
  If not None, the string is appended to the docstring for this Field.
332
356
 
@@ -350,7 +374,7 @@ class Field(Generic[FieldTypeVar]):
350
374
 
351
375
  Notes
352
376
  -----
353
- ``Field`` instances (including those of any subclass of ``Field``) are used
377
+ `Field` instances (including those of any subclass of `Field`) are used
354
378
  as class attributes of `~lsst.pex.config.Config` subclasses (see the
355
379
  example, below). ``Field`` attributes work like the `property` attributes
356
380
  of classes that implement custom setters and getters. `Field` attributes
@@ -361,15 +385,15 @@ class Field(Generic[FieldTypeVar]):
361
385
  When you access a `Field` attribute on a `Config` instance, you don't
362
386
  get the `Field` instance itself. Instead, you get the value of that field,
363
387
  which might be a simple type (`int`, `float`, `str`, `bool`) or a custom
364
- container type (like a `lsst.pex.config.List`) depending on the field's
365
- type. See the example, below.
388
+ container type (like a `lsst.pex.config.ListField`) depending on the
389
+ field's type. See the example, below.
366
390
 
367
391
  Fields can be annotated with a type similar to other python classes (python
368
392
  specification `here <https://peps.python.org/pep-0484/#generics>`_ ).
369
393
  See the name field in the Config example below for an example of this.
370
394
  Unlike most other uses in python, this has an effect at type checking *and*
371
395
  runtime. If the type is specified with a class annotation, it will be used
372
- as the value of the ``dtype`` in the ``Field`` and there is no need to
396
+ as the value of the ``dtype`` in the `Field` and there is no need to
373
397
  specify it as an argument during instantiation.
374
398
 
375
399
  There are Some notes on dtype through type annotation syntax. Type
@@ -377,19 +401,20 @@ class Field(Generic[FieldTypeVar]):
377
401
  name. i.e. "float", but this cannot be used to resolve circular references.
378
402
  Type annotation syntax can be used on an identifier in addition to Class
379
403
  assignment i.e. ``variable: Field[str] = Config.someField`` vs
380
- ``someField = Field[str](doc="some doc"). However, this syntax is only
404
+ ``someField = Field[str](doc="some doc")``. However, this syntax is only
381
405
  useful for annotating the type of the identifier (i.e. variable in previous
382
- example) and does nothing for assigning the dtype of the ``Field``.
406
+ example) and does nothing for assigning the dtype of the `Field`.
383
407
 
384
408
  Examples
385
409
  --------
386
- Instances of ``Field`` should be used as class attributes of
410
+ Instances of `Field` should be used as class attributes of
387
411
  `lsst.pex.config.Config` subclasses:
388
412
 
389
413
  >>> from lsst.pex.config import Config, Field
390
414
  >>> class Example(Config):
391
415
  ... myInt = Field("An integer field.", int, default=0)
392
416
  ... name = Field[str](doc="A string Field")
417
+ >>> config = Example()
393
418
  >>> print(config.myInt)
394
419
  0
395
420
  >>> config.myInt = 5
@@ -600,7 +625,7 @@ class Field(Generic[FieldTypeVar]):
600
625
 
601
626
  Parameters
602
627
  ----------
603
- value : object
628
+ value : `object`
604
629
  The value being validated.
605
630
 
606
631
  Raises
@@ -642,8 +667,8 @@ class Field(Generic[FieldTypeVar]):
642
667
 
643
668
  Parameters
644
669
  ----------
645
- outfile : file-like object
646
- A writeable field handle.
670
+ outfile : `typing.IO`
671
+ A writeable file handle.
647
672
  instance : `~lsst.pex.config.Config`
648
673
  The `~lsst.pex.config.Config` instance that contains this field.
649
674
 
@@ -684,7 +709,7 @@ class Field(Generic[FieldTypeVar]):
684
709
 
685
710
  Returns
686
711
  -------
687
- value : object
712
+ value : `object`
688
713
  The field's value. See *Notes*.
689
714
 
690
715
  Notes
@@ -843,7 +868,7 @@ class Field(Generic[FieldTypeVar]):
843
868
  Relative tolerance for floating point comparisons.
844
869
  atol : `float`, optional
845
870
  Absolute tolerance for floating point comparisons.
846
- output : callable, optional
871
+ output : `collections.abc.Callable`, optional
847
872
  A callable that takes a string, used (possibly repeatedly) to
848
873
  report inequalities.
849
874
 
@@ -1171,15 +1196,51 @@ class Config(metaclass=ConfigMeta): # type: ignore
1171
1196
  e.add_note(f"No field of name {name} exists in config type {_typeStr(self)}")
1172
1197
  raise
1173
1198
 
1199
+ def _filename_to_resource(
1200
+ self, filename: ResourcePathExpression | None = None
1201
+ ) -> tuple[ResourcePath | None, str]:
1202
+ """Create resource path from filename.
1203
+
1204
+ Parameters
1205
+ ----------
1206
+ filename : `lsst.resources.ResourcePathExpression` or `None`
1207
+ The URI expression associated with this config. Can be `None`
1208
+ if no file URI is known.
1209
+
1210
+ Returns
1211
+ -------
1212
+ resource : `lsst.resources.ResourcePath` or `None`
1213
+ The resource version of the filename. Returns `None` if no filename
1214
+ was given or refers to unspecified value.
1215
+ file_string : `str`
1216
+ String form of the resource for use in ``__file__``
1217
+ """
1218
+ if filename is None or filename in ("?", "<unknown>"):
1219
+ return None, "<unknown>"
1220
+ base = _get_config_root()
1221
+ resource = ResourcePath(filename, forceAbsolute=True, forceDirectory=False, root=base)
1222
+
1223
+ # Preferred definition of __file__ is the full OS path. If a config
1224
+ # is loaded with a relative path it must be converted to the absolute
1225
+ # path to avoid confusion with later relative paths referenced inside
1226
+ # the config.
1227
+ if resource.scheme == "file":
1228
+ file_string = resource.ospath
1229
+ else:
1230
+ file_string = str(resource)
1231
+
1232
+ return resource, file_string
1233
+
1174
1234
  def load(self, filename, root="config"):
1175
1235
  """Modify this config in place by executing the Python code in a
1176
1236
  configuration file.
1177
1237
 
1178
1238
  Parameters
1179
1239
  ----------
1180
- filename : `str`
1181
- Name of the configuration file. A configuration file is Python
1182
- module.
1240
+ filename : `lsst.resources.ResourcePathExpression`
1241
+ Name of the configuration URI. A configuration file is a Python
1242
+ module. Since configuration files are Python code, remote URIs
1243
+ are not allowed.
1183
1244
  root : `str`, optional
1184
1245
  Name of the variable in file that refers to the config being
1185
1246
  overridden.
@@ -1199,9 +1260,21 @@ class Config(metaclass=ConfigMeta): # type: ignore
1199
1260
  lsst.pex.config.Config.saveToStream
1200
1261
  lsst.pex.config.Config.saveToString
1201
1262
  """
1202
- with open(filename) as f:
1203
- code = compile(f.read(), filename=filename, mode="exec")
1204
- self.loadFromString(code, root=root, filename=filename)
1263
+ resource, file_string = self._filename_to_resource(filename)
1264
+ if resource is None:
1265
+ # A filename is required.
1266
+ raise ValueError(f"Undefined URI provided to load command: {filename}.")
1267
+
1268
+ if resource.scheme not in ("file", "eups", "resource"):
1269
+ raise ValueError(f"Remote URI ({resource}) can not be used to load configurations.")
1270
+
1271
+ # Push the directory of the file we are now reading onto the stack
1272
+ # so that nested loads are relative to this file.
1273
+ with _push_config_root(resource.dirname()):
1274
+ _LOG.debug("Updating config from URI %s", str(resource))
1275
+ with resource.open("r") as f:
1276
+ code = compile(f.read(), filename=file_string, mode="exec")
1277
+ self._loadFromString(code, root=root, filename=file_string)
1205
1278
 
1206
1279
  def loadFromStream(self, stream, root="config", filename=None, extraLocals=None):
1207
1280
  """Modify this Config in place by executing the Python code in the
@@ -1209,7 +1282,7 @@ class Config(metaclass=ConfigMeta): # type: ignore
1209
1282
 
1210
1283
  Parameters
1211
1284
  ----------
1212
- stream : file-like object, `str`, `bytes`, or `~types.CodeType`
1285
+ stream : `typing.IO`, `str`, `bytes`, or `~types.CodeType`
1213
1286
  Stream containing configuration override code. If this is a
1214
1287
  code object, it should be compiled with ``mode="exec"``.
1215
1288
  root : `str`, optional
@@ -1224,7 +1297,8 @@ class Config(metaclass=ConfigMeta): # type: ignore
1224
1297
  Then this config's field ``myField`` is set to ``5``.
1225
1298
  filename : `str`, optional
1226
1299
  Name of the configuration file, or `None` if unknown or contained
1227
- in the stream. Used for error reporting.
1300
+ in the stream. Used for error reporting and to set ``__file__``
1301
+ variable in config.
1228
1302
  extraLocals : `dict` of `str` to `object`, optional
1229
1303
  Any extra variables to include in local scope when loading.
1230
1304
 
@@ -1244,7 +1318,7 @@ class Config(metaclass=ConfigMeta): # type: ignore
1244
1318
  """
1245
1319
  if hasattr(stream, "read"):
1246
1320
  if filename is None:
1247
- filename = getattr(stream, "name", "?")
1321
+ filename = getattr(stream, "name", "<unknown>")
1248
1322
  code = compile(stream.read(), filename=filename, mode="exec")
1249
1323
  else:
1250
1324
  code = stream
@@ -1268,9 +1342,11 @@ class Config(metaclass=ConfigMeta): # type: ignore
1268
1342
  config.myField = 5
1269
1343
 
1270
1344
  Then this config's field ``myField`` is set to ``5``.
1271
- filename : `str`, optional
1272
- Name of the configuration file, or `None` if unknown or contained
1273
- in the stream. Used for error reporting.
1345
+ filename : `lsst.resources.ResourcePathExpression`, optional
1346
+ URI of the configuration file, or `None` if unknown or contained
1347
+ in the stream. Used for error reporting and to set ``__file__``
1348
+ variable. Required to be set if the string config attempts to
1349
+ load other configs using either relative path or ``__file__``.
1274
1350
  extraLocals : `dict` of `str` to `object`, optional
1275
1351
  Any extra variables to include in local scope when loading.
1276
1352
 
@@ -1291,7 +1367,24 @@ class Config(metaclass=ConfigMeta): # type: ignore
1291
1367
  if filename is None:
1292
1368
  # try to determine the file name; a compiled string
1293
1369
  # has attribute "co_filename",
1294
- filename = getattr(code, "co_filename", "?")
1370
+ filename = getattr(code, "co_filename", "<unknown>")
1371
+
1372
+ resource, file_string = self._filename_to_resource(filename)
1373
+ if resource is None:
1374
+ # No idea where this config came from so no ability to deal with
1375
+ # relative paths. No reason to use context.
1376
+ self._loadFromString(code, root=root, filename=filename, extraLocals=extraLocals)
1377
+ else:
1378
+ # Push the directory of the file we are now reading onto the stack
1379
+ # so that nested loads are relative to this file.
1380
+ with _push_config_root(resource.dirname()):
1381
+ self._loadFromString(code, root=root, filename=file_string, extraLocals=extraLocals)
1382
+
1383
+ def _loadFromString(self, code, root="config", filename=None, extraLocals=None):
1384
+ """Update config from string.
1385
+
1386
+ Assumes relative directory path context has been setup by caller.
1387
+ """
1295
1388
  with RecordingImporter() as importer:
1296
1389
  globals = {"__file__": filename}
1297
1390
  local = {root: self}
@@ -1374,7 +1467,7 @@ class Config(metaclass=ConfigMeta): # type: ignore
1374
1467
 
1375
1468
  Parameters
1376
1469
  ----------
1377
- outfile : file-like object
1470
+ outfile : `typing.TextIO`
1378
1471
  Destination file object write the config into. Accepts strings not
1379
1472
  bytes.
1380
1473
  root : `str`, optional
@@ -1428,7 +1521,7 @@ class Config(metaclass=ConfigMeta): # type: ignore
1428
1521
 
1429
1522
  Parameters
1430
1523
  ----------
1431
- outfile : file-like object
1524
+ outfile : `typing.TextIO`
1432
1525
  Destination file object write the config into. Accepts strings not
1433
1526
  bytes.
1434
1527
  """
@@ -1663,7 +1756,7 @@ class Config(metaclass=ConfigMeta): # type: ignore
1663
1756
  Relative tolerance for floating point comparisons.
1664
1757
  atol : `float`, optional
1665
1758
  Absolute tolerance for floating point comparisons.
1666
- output : callable, optional
1759
+ output : `collections.abc.Callable`, optional
1667
1760
  A callable that takes a string, used (possibly repeatedly) to
1668
1761
  report inequalities.
1669
1762
 
@@ -1784,7 +1877,7 @@ def unreduceConfig(cls_, stream):
1784
1877
  cls_ : `lsst.pex.config.Config`-type
1785
1878
  A `lsst.pex.config.Config` type (not an instance) that is instantiated
1786
1879
  with configurations in the ``stream``.
1787
- stream : file-like object, `str`, or `~types.CodeType`
1880
+ stream : `typing.IO`, `str`, or `~types.CodeType`
1788
1881
  Stream containing configuration override code.
1789
1882
 
1790
1883
  Returns
@@ -192,7 +192,7 @@ class ConfigInstanceDict(collections.abc.Mapping[str, Config]):
192
192
  result._typemap = self._typemap
193
193
  if self._selection is not None:
194
194
  if self._field.multi:
195
- result._selection = SelectionSet(result._dict, self._selection._set)
195
+ result._selection = SelectionSet(self, self._selection._set)
196
196
  else:
197
197
  result._selection = self._selection
198
198
  return result
@@ -412,9 +412,9 @@ class ConfigChoiceField(Field[ConfigInstanceDict]):
412
412
  If `False`, the field allows only a single selection. In this case,
413
413
  set the active config by assigning the config's key from the
414
414
  ``typemap`` to the field's ``name`` attribute (see *Examples*).
415
- deprecated : None or `str`, optional
415
+ deprecated : `None` or `str`, optional
416
416
  A description of why this Field is deprecated, including removal date.
417
- If not None, the string is appended to the docstring for this Field.
417
+ If not `None`, the string is appended to the docstring for this Field.
418
418
 
419
419
  See Also
420
420
  --------
@@ -650,7 +650,7 @@ class ConfigChoiceField(Field[ConfigInstanceDict]):
650
650
  Relative tolerance for floating point comparisons.
651
651
  atol : `float`
652
652
  Absolute tolerance for floating point comparisons.
653
- output : callable
653
+ output : `collections.abc.Callable`
654
654
  A callable that takes a string, used (possibly repeatedly) to
655
655
  report inequalities.
656
656
 
@@ -76,7 +76,7 @@ class ConfigDict(Dict[str, Config]):
76
76
  return type(self)(
77
77
  config,
78
78
  self._field,
79
- {k: v._copy() for k, v in self._dict.items()},
79
+ {k: v.copy() for k, v in self._dict.items()},
80
80
  at=None,
81
81
  label="copy",
82
82
  setHistory=False,
@@ -148,7 +148,7 @@ class ConfigDictField(DictField):
148
148
  itemtype : `lsst.pex.config.Config`-type
149
149
  The type of the values in the mapping. This must be
150
150
  `~lsst.pex.config.Config` or a subclass.
151
- default : optional
151
+ default : `typing.Any`, optional
152
152
  Unknown.
153
153
  default : ``itemtype``-dtype, optional
154
154
  Default value of this field.
@@ -161,9 +161,9 @@ class ConfigDictField(DictField):
161
161
  Callable to check a key.
162
162
  itemCheck : `~collections.abc.Callable` or `None`, optional
163
163
  Callable to check an item.
164
- deprecated : None or `str`, optional
164
+ deprecated : `None` or `str`, optional
165
165
  A description of why this Field is deprecated, including removal date.
166
- If not None, the string is appended to the docstring for this Field.
166
+ If not `None`, the string is appended to the docstring for this Field.
167
167
 
168
168
  Raises
169
169
  ------
@@ -171,7 +171,7 @@ class ConfigDictField(DictField):
171
171
  Raised if the inputs are invalid:
172
172
 
173
173
  - ``keytype`` or ``itemtype`` arguments are not supported types
174
- (members of `ConfigDictField.supportedTypes`.
174
+ (members of `Field.supportedTypes`.
175
175
  - ``dictCheck``, ``keyCheck`` or ``itemCheck`` is not a callable
176
176
  function.
177
177
 
@@ -326,7 +326,7 @@ class ConfigDictField(DictField):
326
326
  Relative tolerance for floating point comparisons.
327
327
  atol : `float`
328
328
  Absolute tolerance for floating point comparisons.
329
- output : callable
329
+ output : `collections.abc.Callable`
330
330
  A callable that takes a string, used (possibly repeatedly) to
331
331
  report inequalities.
332
332
 
@@ -52,12 +52,12 @@ class ConfigField(Field[FieldTypeVar]):
52
52
  considered equivalent to assigning a default-constructed sub-config.
53
53
  This means that the argument default can be ``dtype``, as well as an
54
54
  instance of ``dtype``.
55
- check : callable, optional
55
+ check : `collections.abc.Callable`, optional
56
56
  A callback function that validates the field's value, returning `True`
57
57
  if the value is valid, and `False` otherwise.
58
- deprecated : None or `str`, optional
58
+ deprecated : `None` or `str`, optional
59
59
  A description of why this Field is deprecated, including removal date.
60
- If not None, the string is appended to the docstring for this Field.
60
+ If not `None`, the string is appended to the docstring for this Field.
61
61
 
62
62
  See Also
63
63
  --------
@@ -178,7 +178,7 @@ class ConfigField(Field[FieldTypeVar]):
178
178
 
179
179
  Parameters
180
180
  ----------
181
- outfile : file-like object
181
+ outfile : `typing.IO`
182
182
  A writeable field handle.
183
183
  instance : `~lsst.pex.config.Config`
184
184
  The `~lsst.pex.config.Config` instance that contains this field.
@@ -226,7 +226,7 @@ class ConfigField(Field[FieldTypeVar]):
226
226
 
227
227
  Returns
228
228
  -------
229
- value : object
229
+ value : `object`
230
230
  The field's value. See *Notes*.
231
231
 
232
232
  Notes
@@ -299,7 +299,7 @@ class ConfigField(Field[FieldTypeVar]):
299
299
  Relative tolerance for floating point comparisons.
300
300
  atol : `float`
301
301
  Absolute tolerance for floating point comparisons.
302
- output : callable
302
+ output : `collections.abc.Callable`
303
303
  A callable that takes a string, used (possibly repeatedly) to
304
304
  report inequalities.
305
305
 
@@ -446,7 +446,7 @@ class ConfigurableActionStructField(Field[ActionTypeVar]):
446
446
  Relative tolerance for floating point comparisons.
447
447
  atol : `float`
448
448
  Absolute tolerance for floating point comparisons.
449
- output : callable
449
+ output : `collections.abc.Callable`
450
450
  A callable that takes a string, used (possibly repeatedly) to
451
451
  report inequalities.
452
452
 
@@ -247,7 +247,7 @@ class ConfigurableField(Field[ConfigurableInstance[FieldTypeVar]]):
247
247
  ----------
248
248
  doc : `str`
249
249
  A description of the configuration field.
250
- target : configurable class
250
+ target : `lsst.pipe.base.Task` or other configurable class
251
251
  The configurable target. Configurables have a ``ConfigClass``
252
252
  attribute. Within the task framework, configurables are
253
253
  `lsst.pipe.base.Task` subclasses).
@@ -255,16 +255,16 @@ class ConfigurableField(Field[ConfigurableInstance[FieldTypeVar]]):
255
255
  The subclass of `lsst.pex.config.Config` expected as the configuration
256
256
  class of the ``target``. If ``ConfigClass`` is unset then
257
257
  ``target.ConfigClass`` is used.
258
- default : ``ConfigClass``-type, optional
258
+ default : `type`, optional
259
259
  The default configuration class. Normally this parameter is not set,
260
260
  and defaults to ``ConfigClass`` (or ``target.ConfigClass``).
261
- check : callable, optional
261
+ check : `collections.abc.Callable`, optional
262
262
  Callable that takes the field's value (the ``target``) as its only
263
263
  positional argument, and returns `True` if the ``target`` is valid (and
264
264
  `False` otherwise).
265
- deprecated : None or `str`, optional
265
+ deprecated : `None` or `str`, optional
266
266
  A description of why this Field is deprecated, including removal date.
267
- If not None, the string is appended to the docstring for this Field.
267
+ If not `None`, the string is appended to the docstring for this Field.
268
268
 
269
269
  See Also
270
270
  --------
@@ -289,7 +289,7 @@ class ConfigurableField(Field[ConfigurableInstance[FieldTypeVar]]):
289
289
 
290
290
  Parameters
291
291
  ----------
292
- target : configurable class
292
+ target : `type`
293
293
  The configurable being verified.
294
294
  ConfigClass : `lsst.pex.config.Config`-type or `None`
295
295
  The configuration class associated with the ``target``. This can
@@ -486,7 +486,7 @@ class ConfigurableField(Field[ConfigurableInstance[FieldTypeVar]]):
486
486
  Relative tolerance for floating point comparisons.
487
487
  atol : `float`
488
488
  Absolute tolerance for floating point comparisons.
489
- output : callable
489
+ output : `collections.abc.Callable`
490
490
  A callable that takes a string, used (possibly repeatedly) to
491
491
  report inequalities. For example: `print`.
492
492
 
@@ -229,15 +229,15 @@ class DictField(Field[Dict[KeyTypeVar, ItemTypeVar]], Generic[KeyTypeVar, ItemTy
229
229
  The default mapping.
230
230
  optional : `bool`, optional
231
231
  If `True`, the field doesn't need to have a set value.
232
- dictCheck : callable
232
+ dictCheck : `collections.abc.Callable`
233
233
  A function that validates the dictionary as a whole.
234
- keyCheck : callable
234
+ keyCheck : `collections.abc.Callable`
235
235
  A function that validates individual mapping keys.
236
- itemCheck : callable
236
+ itemCheck : `collections.abc.Callable`
237
237
  A function that validates individual mapping values.
238
- deprecated : None or `str`, optional
238
+ deprecated : `None` or `str`, optional
239
239
  A description of why this Field is deprecated, including removal date.
240
- If not None, the string is appended to the docstring for this Field.
240
+ If not `None`, the string is appended to the docstring for this Field.
241
241
 
242
242
  See Also
243
243
  --------
@@ -439,7 +439,7 @@ class DictField(Field[Dict[KeyTypeVar, ItemTypeVar]], Generic[KeyTypeVar, ItemTy
439
439
  Relative tolerance for floating point comparisons.
440
440
  atol : `float`
441
441
  Absolute tolerance for floating point comparisons.
442
- output : callable
442
+ output : `collections.abc.Callable`
443
443
  A callable that takes a string, used (possibly repeatedly) to
444
444
  report inequalities.
445
445
 
@@ -57,7 +57,7 @@ class List(collections.abc.MutableSequence[FieldTypeVar]):
57
57
  Config instance that contains the ``field``.
58
58
  field : `ListField`
59
59
  Instance of the `ListField` using this ``List``.
60
- value : sequence
60
+ value : `collections.abc.Sequence`
61
61
  Sequence of values that are inserted into this ``List``.
62
62
  at : `list` of `~lsst.pex.config.callStack.StackFrame`
63
63
  The call stack (created by `lsst.pex.config.callStack.getCallStack`).
@@ -114,7 +114,7 @@ class List(collections.abc.MutableSequence[FieldTypeVar]):
114
114
  ----------
115
115
  i : `int`
116
116
  Index of the item in the `list`.
117
- x : object
117
+ x : `object`
118
118
  Item in the `list`.
119
119
 
120
120
  Raises
@@ -215,7 +215,7 @@ class List(collections.abc.MutableSequence[FieldTypeVar]):
215
215
  ----------
216
216
  i : `int`
217
217
  Index where the item is inserted.
218
- x : object
218
+ x : `object`
219
219
  Item that is inserted.
220
220
  at : `list` of `~lsst.pex.config.callStack.StackFrame` or `None`,\
221
221
  optional
@@ -283,18 +283,18 @@ class ListField(Field[List[FieldTypeVar]], Generic[FieldTypeVar]):
283
283
  ----------
284
284
  doc : `str`
285
285
  A description of the field.
286
- dtype : class, optional
286
+ dtype : `type`, optional
287
287
  The data type of items in the list. Optional if supplied as typing
288
288
  argument to the class.
289
- default : sequence, optional
289
+ default : `collections.abc.Sequence`, optional
290
290
  The default items for the field.
291
291
  optional : `bool`, optional
292
292
  Set whether the field is *optional*. When `False`,
293
293
  `lsst.pex.config.Config.validate` will fail if the field's value is
294
294
  `None`.
295
- listCheck : callable, optional
295
+ listCheck : `collections.abc.Callable`, optional
296
296
  A callable that validates the list as a whole.
297
- itemCheck : callable, optional
297
+ itemCheck : `collections.abc.Callable`, optional
298
298
  A callable that validates individual items in the list.
299
299
  length : `int`, optional
300
300
  If set, this field must contain exactly ``length`` number of items.
@@ -304,9 +304,9 @@ class ListField(Field[List[FieldTypeVar]], Generic[FieldTypeVar]):
304
304
  maxLength : `int`, optional
305
305
  If set, this field must contain *no more than* ``maxLength`` number of
306
306
  items.
307
- deprecated : None or `str`, optional
307
+ deprecated : `None` or `str`, optional
308
308
  A description of why this Field is deprecated, including removal date.
309
- If not None, the string is appended to the docstring for this Field.
309
+ If not `None`, the string is appended to the docstring for this Field.
310
310
 
311
311
  See Also
312
312
  --------
@@ -503,7 +503,7 @@ class ListField(Field[List[FieldTypeVar]], Generic[FieldTypeVar]):
503
503
  Relative tolerance for floating point comparisons.
504
504
  atol : `float`
505
505
  Absolute tolerance for floating point comparisons.
506
- output : callable
506
+ output : `collections.abc.Callable`
507
507
  If not None, a callable that takes a `str`, used (possibly
508
508
  repeatedly) to report inequalities.
509
509
 
@@ -56,9 +56,9 @@ class RangeField(Field):
56
56
  If `True`, the ``min`` value is included in the allowed range.
57
57
  inclusiveMax : `bool`, optional
58
58
  If `True`, the ``max`` value is included in the allowed range.
59
- deprecated : None or `str`, optional
59
+ deprecated : `None` or `str`, optional
60
60
  A description of why this Field is deprecated, including removal date.
61
- If not None, the string is appended to the docstring for this Field.
61
+ If not `None`, the string is appended to the docstring for this Field.
62
62
 
63
63
  See Also
64
64
  --------
@@ -42,7 +42,7 @@ class ConfigurableWrapper:
42
42
 
43
43
  Parameters
44
44
  ----------
45
- target : configurable class
45
+ target : `lsst.pipe.base.Task` or other configurable class
46
46
  Target class.
47
47
  ConfigClass : `type`
48
48
  Config class.
@@ -135,7 +135,7 @@ class Registry(collections.abc.Mapping):
135
135
  Name that the ``target`` is registered under. The target can
136
136
  be accessed later with `dict`-like patterns using ``name`` as
137
137
  the key.
138
- target : obj
138
+ target : `lsst.pipe.base.Task` or other configurable type
139
139
  A configurable type, usually a subclass of `lsst.pipe.base.Task`.
140
140
  ConfigClass : `lsst.pex.config.Config`-type, optional
141
141
  A subclass of `lsst.pex.config.Config` used to configure the
@@ -188,7 +188,7 @@ class Registry(collections.abc.Mapping):
188
188
  ----------
189
189
  doc : `str`
190
190
  A description of the field.
191
- default : object, optional
191
+ default : `object`, optional
192
192
  The default target for the field.
193
193
  optional : `bool`, optional
194
194
  When `False`, `lsst.pex.config.Config.validate` fails if the
@@ -456,7 +456,7 @@ def registerConfig(name, registry, target):
456
456
  Name of the ``target`` in the ``registry``.
457
457
  registry : `Registry`
458
458
  The registry containing the ``target``.
459
- target : obj
459
+ target : `lsst.pipe.base.Task` or other configurable type
460
460
  A configurable type, such as a subclass of `lsst.pipe.base.Task`.
461
461
 
462
462
  See Also
@@ -1,2 +1,2 @@
1
1
  __all__ = ["__version__"]
2
- __version__ = "30.0.0rc2"
2
+ __version__ = "30.0.1rc1"
lsst/pex/config/wrap.py CHANGED
@@ -61,7 +61,7 @@ def makeConfigClass(ctrl, name=None, base=Config, doc=None, module=None, cls=Non
61
61
 
62
62
  Parameters
63
63
  ----------
64
- ctrl : class
64
+ ctrl : `type`
65
65
  C++ control class to wrap.
66
66
  name : `str`, optional
67
67
  Name of the new config class; defaults to the ``__name__`` of the
@@ -70,7 +70,7 @@ def makeConfigClass(ctrl, name=None, base=Config, doc=None, module=None, cls=Non
70
70
  Base class for the config class.
71
71
  doc : `str`, optional
72
72
  Docstring for the config class.
73
- module : object, `str`, `int`, or `None` optional
73
+ module : `object`, `str`, `int`, or `None` optional
74
74
  Either a module object, a string specifying the name of the module, or
75
75
  an integer specifying how far back in the stack to look for the module
76
76
  to use: 0 is the immediate caller of `~lsst.pex.config.wrap`. This will
@@ -78,7 +78,7 @@ def makeConfigClass(ctrl, name=None, base=Config, doc=None, module=None, cls=Non
78
78
  will also be added to the module. Ignored if `None` or if ``cls`` is
79
79
  not `None`. Defaults to None in which case module is looked up from the
80
80
  module of ctrl.
81
- cls : class
81
+ cls : `type` [`lsst.pex.config.Config`]
82
82
  An existing config class to use instead of creating a new one; name,
83
83
  base doc, and module will be ignored if this is not `None`.
84
84
 
@@ -316,7 +316,7 @@ def wrap(ctrl):
316
316
 
317
317
  Parameters
318
318
  ----------
319
- ctrl : object
319
+ ctrl : `object`
320
320
  The C++ control class.
321
321
 
322
322
  Notes
@@ -1,20 +1,21 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lsst-pex-config
3
- Version: 30.0.0rc2
3
+ Version: 30.0.1rc1
4
4
  Summary: A flexible configuration system using Python files.
5
5
  Author-email: Rubin Observatory Data Management <dm-admin@lists.lsst.org>
6
6
  License-Expression: BSD-3-Clause OR GPL-3.0-or-later
7
7
  Project-URL: Homepage, https://github.com/lsst/pex_config
8
+ Project-URL: Source, https://github.com/lsst/pex_config
8
9
  Keywords: lsst
9
10
  Classifier: Intended Audience :: Science/Research
10
11
  Classifier: Operating System :: OS Independent
11
12
  Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: Python :: 3.10
13
+ Classifier: Programming Language :: Python :: 3.14
13
14
  Classifier: Programming Language :: Python :: 3.11
14
15
  Classifier: Programming Language :: Python :: 3.12
15
16
  Classifier: Programming Language :: Python :: 3.13
16
17
  Classifier: Topic :: Scientific/Engineering :: Astronomy
17
- Requires-Python: >=3.10.0
18
+ Requires-Python: >=3.11.0
18
19
  Description-Content-Type: text/x-rst
19
20
  License-File: COPYRIGHT
20
21
  License-File: LICENSE
@@ -22,6 +23,7 @@ License-File: gpl-v3.0.txt
22
23
  License-File: bsd_license.txt
23
24
  Requires-Dist: pyyaml>=5.1
24
25
  Requires-Dist: numpy>=1.17
26
+ Requires-Dist: lsst-resources
25
27
  Provides-Extra: test
26
28
  Requires-Dist: pytest>=3.2; extra == "test"
27
29
  Requires-Dist: pytest-openfiles>=0.5.0; extra == "test"
@@ -0,0 +1,35 @@
1
+ lsst/__init__.py,sha256=_2bZAHuDVAx7MM7KA7pt3DYp641NY4RzSoRAwesWKfU,67
2
+ lsst/pex/__init__.py,sha256=_2bZAHuDVAx7MM7KA7pt3DYp641NY4RzSoRAwesWKfU,67
3
+ lsst/pex/config/__init__.py,sha256=wv2iwYszZA11Uyz4AFV2cnURBuKi2dHy9H-41FLzHvo,1282
4
+ lsst/pex/config/_doNotImportMe.py,sha256=AYqqE8aIHH711hPcZJssplBsIIW4xCbz2oZqRNheI3I,87
5
+ lsst/pex/config/callStack.py,sha256=qfD3FrqG7U_odTdd9BpNGmWopUw_fE2f3Yu_fk5mn60,5912
6
+ lsst/pex/config/choiceField.py,sha256=7tevtgxgJju6HwFBE1de3FUwh3gOzJOvVnrUzXYYg-w,4282
7
+ lsst/pex/config/comparison.py,sha256=4ZF8tLlGF2mR0log_aYvQfMbWcYQIqSo3VXBsek-W6E,6361
8
+ lsst/pex/config/config.py,sha256=nqXko3p0hVu17JK8cyO64D8pRacF5WIbF6rU_2rU6CA,67036
9
+ lsst/pex/config/configChoiceField.py,sha256=ZPcXE1OCM-XkUH7JVGQ3ExKWaHidCLohKYq6p47wvs8,24453
10
+ lsst/pex/config/configDictField.py,sha256=PFe0jn9RqZUGMBw5biBYK1H-7NWBrKfdYPeBP6vdO4g,12918
11
+ lsst/pex/config/configField.py,sha256=esu0VjB04ZMgcDkTt_VZVaAnoa3swEhO3FswzBbrR54,11692
12
+ lsst/pex/config/configurableField.py,sha256=nVCABJ1R3PsD-lsCSQr4VRoCox5B4A1uRRAB9n-uZh4,19040
13
+ lsst/pex/config/convert.py,sha256=dBTLjkcoh3lM6FxtY9DV33iLOtD6V0PMni6O2b9K4Ww,2397
14
+ lsst/pex/config/dictField.py,sha256=8lc6k4pos1FBIZgmTuF0HYfnfA9qujnhAQkpxMWWVVI,17538
15
+ lsst/pex/config/history.py,sha256=k6ecRik20basI2WAtYuhHd1TotrjB15Io59o2yMMqHg,8373
16
+ lsst/pex/config/listField.py,sha256=UYQodU2UWSp3-4yu4N61S3twdupV1lRoOXONxFcXFxU,18955
17
+ lsst/pex/config/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
+ lsst/pex/config/rangeField.py,sha256=shOHUL7zxiRbjqfDuuThq7AuLxZmZyANFUwd98hm0Ao,5433
19
+ lsst/pex/config/registry.py,sha256=Ew6eS6S3DWPfWHFiYDNOXeyXi9CrH6wGvvaSXstpGRg,15913
20
+ lsst/pex/config/version.py,sha256=-auEgPcWk4qAWrWVMJY7Of7dAJ0dNQHoqQraCNdAEN4,52
21
+ lsst/pex/config/wrap.py,sha256=Oc_H55EYFg9VNlQz4mvevq1TOcn6Z_kgLhwznJ9BcpU,12997
22
+ lsst/pex/config/configurableActions/__init__.py,sha256=kwMbhFr3LirwEqzgHij7CxWF_xki3UYeajzveb4vpTI,1039
23
+ lsst/pex/config/configurableActions/_configurableAction.py,sha256=KZiYYzIQHNeUhDxS1DMb_D9X28_LOzLyNXclaOW-ApY,2784
24
+ lsst/pex/config/configurableActions/_configurableActionField.py,sha256=E1uVrGIvu64QDJL76sW3LlIrR30-NJs0ZQeofy-iVEs,5353
25
+ lsst/pex/config/configurableActions/_configurableActionStructField.py,sha256=65dbNZ-HR3xVURYDX7tth2o0aC8zbZdCnNy9iZmBlEA,17772
26
+ lsst/pex/config/configurableActions/tests.py,sha256=aisHgzghfR4NFQD22NU2K5pNilCjAwcJTSMs0vK7dzI,3039
27
+ lsst_pex_config-30.0.1rc1.dist-info/licenses/COPYRIGHT,sha256=J3bcuh9PTaTU9iNjxE-9THWEwoo5drYshgYvZVgUKoI,381
28
+ lsst_pex_config-30.0.1rc1.dist-info/licenses/LICENSE,sha256=pRExkS03v0MQW-neNfIcaSL6aiAnoLxYgtZoFzQ6zkM,232
29
+ lsst_pex_config-30.0.1rc1.dist-info/licenses/bsd_license.txt,sha256=7MIcv8QRX9guUtqPSBDMPz2SnZ5swI-xZMqm_VDSfxY,1606
30
+ lsst_pex_config-30.0.1rc1.dist-info/licenses/gpl-v3.0.txt,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
31
+ lsst_pex_config-30.0.1rc1.dist-info/METADATA,sha256=B1qkUubOp3JrWvUQR8mr6eeYeJSSntHVC6T9qyVpQys,2292
32
+ lsst_pex_config-30.0.1rc1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
33
+ lsst_pex_config-30.0.1rc1.dist-info/top_level.txt,sha256=eUWiOuVVm9wwTrnAgiJT6tp6HQHXxIhj2QSZ7NYZH80,5
34
+ lsst_pex_config-30.0.1rc1.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
35
+ lsst_pex_config-30.0.1rc1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,35 +0,0 @@
1
- lsst/__init__.py,sha256=_2bZAHuDVAx7MM7KA7pt3DYp641NY4RzSoRAwesWKfU,67
2
- lsst/pex/__init__.py,sha256=_2bZAHuDVAx7MM7KA7pt3DYp641NY4RzSoRAwesWKfU,67
3
- lsst/pex/config/__init__.py,sha256=wv2iwYszZA11Uyz4AFV2cnURBuKi2dHy9H-41FLzHvo,1282
4
- lsst/pex/config/_doNotImportMe.py,sha256=AYqqE8aIHH711hPcZJssplBsIIW4xCbz2oZqRNheI3I,87
5
- lsst/pex/config/callStack.py,sha256=HxcH1QpYERsR68sBLs8jqX3Gj85e28vhCCjCy6lnVaE,5917
6
- lsst/pex/config/choiceField.py,sha256=S_ygw6coQaKNIstpQxKF-MMsX0agdEZtqZuEcK1EYJg,4277
7
- lsst/pex/config/comparison.py,sha256=2zbOdMD5aOC3ccI2NJSxtiI59wLMmssuP9oxdXBvzaE,6320
8
- lsst/pex/config/config.py,sha256=DPlN6tLVJawAaJPuxTjjDZQGYPnwWOv1cGq5myFoNQU,63028
9
- lsst/pex/config/configChoiceField.py,sha256=CbISBYgMuKEJyed2G6f8XEodL-98O3L2Haxc8Dx_s1I,24439
10
- lsst/pex/config/configDictField.py,sha256=gnVi52CHB3B0K-NNC3NUZDxi556pFJnVSF4-73JlJw4,12893
11
- lsst/pex/config/configField.py,sha256=9jSPSHO_9p-499SmJgvMWBbizAl4p1jTQrtlib1gXHo,11655
12
- lsst/pex/config/configurableField.py,sha256=-nYA54G6UJLVzB_lQgPRiCMQJ_yv9c-43uxyCJkH198,18995
13
- lsst/pex/config/convert.py,sha256=dBTLjkcoh3lM6FxtY9DV33iLOtD6V0PMni6O2b9K4Ww,2397
14
- lsst/pex/config/dictField.py,sha256=zCzW0yduPDKH_eSwtYT5pcTT-sAejcWvn6xwvH33HAE,17462
15
- lsst/pex/config/history.py,sha256=k6ecRik20basI2WAtYuhHd1TotrjB15Io59o2yMMqHg,8373
16
- lsst/pex/config/listField.py,sha256=H0j1TR3jTxUM80vcBWmoNlCCjd1HFSP15UxiR56gBxY,18856
17
- lsst/pex/config/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
- lsst/pex/config/rangeField.py,sha256=VmfcAoLYRJIdIsnFQIFlVYKrmNnfGX6Ef9enEYkFTx8,5429
19
- lsst/pex/config/registry.py,sha256=JKy6kXOumSYDoOdHlg4oBGeQN7pmMSOgCJCXylEI6yM,15790
20
- lsst/pex/config/version.py,sha256=CrAQNQjb1NNXqaNvScI53U2GvkmrnpRtyOiy0bIrcl4,52
21
- lsst/pex/config/wrap.py,sha256=t8s5KzN2kJ-oW8AJTZrz4xAl0Qtpvnqo9H6rQKRBK_s,12964
22
- lsst/pex/config/configurableActions/__init__.py,sha256=kwMbhFr3LirwEqzgHij7CxWF_xki3UYeajzveb4vpTI,1039
23
- lsst/pex/config/configurableActions/_configurableAction.py,sha256=KZiYYzIQHNeUhDxS1DMb_D9X28_LOzLyNXclaOW-ApY,2784
24
- lsst/pex/config/configurableActions/_configurableActionField.py,sha256=E1uVrGIvu64QDJL76sW3LlIrR30-NJs0ZQeofy-iVEs,5353
25
- lsst/pex/config/configurableActions/_configurableActionStructField.py,sha256=HL53MsLh1DaKmZBD3midrHcB8tbJ46lNBwerjne0qrg,17754
26
- lsst/pex/config/configurableActions/tests.py,sha256=aisHgzghfR4NFQD22NU2K5pNilCjAwcJTSMs0vK7dzI,3039
27
- lsst_pex_config-30.0.0rc2.dist-info/licenses/COPYRIGHT,sha256=J3bcuh9PTaTU9iNjxE-9THWEwoo5drYshgYvZVgUKoI,381
28
- lsst_pex_config-30.0.0rc2.dist-info/licenses/LICENSE,sha256=pRExkS03v0MQW-neNfIcaSL6aiAnoLxYgtZoFzQ6zkM,232
29
- lsst_pex_config-30.0.0rc2.dist-info/licenses/bsd_license.txt,sha256=7MIcv8QRX9guUtqPSBDMPz2SnZ5swI-xZMqm_VDSfxY,1606
30
- lsst_pex_config-30.0.0rc2.dist-info/licenses/gpl-v3.0.txt,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
31
- lsst_pex_config-30.0.0rc2.dist-info/METADATA,sha256=mJscy7ZVKy3me7ddU2jrehkQdhZWvt1gQ4J0jM2wYho,2206
32
- lsst_pex_config-30.0.0rc2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
33
- lsst_pex_config-30.0.0rc2.dist-info/top_level.txt,sha256=eUWiOuVVm9wwTrnAgiJT6tp6HQHXxIhj2QSZ7NYZH80,5
34
- lsst_pex_config-30.0.0rc2.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
35
- lsst_pex_config-30.0.0rc2.dist-info/RECORD,,