14
14
15
15
"""Defines which types are Sweepable."""
16
16
17
- from typing import Iterable , Iterator , List , Sequence , Union , cast
17
+ from typing import Iterable , Iterator , List , Optional , Sequence , Union , cast
18
18
import warnings
19
19
from typing_extensions import Protocol
20
20
@@ -44,12 +44,12 @@ def to_resolvers(sweepable: Sweepable) -> Iterator[ParamResolver]:
44
44
yield from sweep
45
45
46
46
47
- def to_sweeps (sweepable : Sweepable ) -> List [Sweep ]:
47
+ def to_sweeps (sweepable : Sweepable , metadata : Optional [ dict ] = None ) -> List [Sweep ]:
48
48
"""Converts a Sweepable to a list of Sweeps."""
49
49
if sweepable is None :
50
50
return [UnitSweep ]
51
51
if isinstance (sweepable , ParamResolver ):
52
- return [_resolver_to_sweep (sweepable )]
52
+ return [_resolver_to_sweep (sweepable , metadata )]
53
53
if isinstance (sweepable , Sweep ):
54
54
return [sweepable ]
55
55
if isinstance (sweepable , dict ):
@@ -63,9 +63,13 @@ def to_sweeps(sweepable: Sweepable) -> List[Sweep]:
63
63
stacklevel = 2 ,
64
64
)
65
65
product_sweep = dict_to_product_sweep (sweepable )
66
- return [_resolver_to_sweep (resolver ) for resolver in product_sweep ]
66
+ return [_resolver_to_sweep (resolver , metadata ) for resolver in product_sweep ]
67
67
if isinstance (sweepable , Iterable ) and not isinstance (sweepable , str ):
68
- return [sweep for item in sweepable for sweep in to_sweeps (item )] # type: ignore[arg-type]
68
+ return [
69
+ sweep
70
+ for item in sweepable
71
+ for sweep in to_sweeps (item , metadata ) # type: ignore[arg-type]
72
+ ]
69
73
raise TypeError (f'Unrecognized sweepable type: { type (sweepable )} .\n sweepable: { sweepable } ' )
70
74
71
75
@@ -98,8 +102,13 @@ def to_sweep(
98
102
raise TypeError (f'Unexpected sweep-like value: { sweep_or_resolver_list } ' )
99
103
100
104
101
- def _resolver_to_sweep (resolver : ParamResolver ) -> Sweep :
105
+ def _resolver_to_sweep (resolver : ParamResolver , metadata : Optional [ dict ] ) -> Sweep :
102
106
params = resolver .param_dict
103
107
if not params :
104
108
return UnitSweep
105
- return Zip (* [Points (key , [cast (float , value )]) for key , value in params .items ()])
109
+ return Zip (
110
+ * [
111
+ Points (key , [cast (float , value )], metadata = metadata .get (key ) if metadata else None )
112
+ for key , value in params .items ()
113
+ ]
114
+ )
0 commit comments