normalized_scalar_param_list¶
- odl.util.normalize.normalized_scalar_param_list(param, length, param_conv=None, keep_none=True, return_nonconv=False)[source]¶
Return a list of given length from a scalar parameter.
The typical use case is when a single value or a sequence of values is accepted as input. This function makes a list from a given sequence or a list of identical elements from a single value, with cast to a given parameter type if desired.
To distinguish a parameter sequence from a single parameter, the following rules are applied:
If
param
is not a sequence, it is treated as a single parameter (e.g.1
).If
len(param) == length == 1
, thenparam
is interpreted as a single parameter (e.g.[1]
or'1'
).If
len(param) == length != 1
, thenparam
is interpreted as sequence of parameters.Otherwise,
param
is interpreted as a single parameter.
Note that this function is not applicable to parameters which are themselves iterable (e.g.
'abc'
withlength=3
will be interpreted as equivalent to['a', 'b', 'c']
).- Parameters:
- param
Input parameter to turn into a list.
- lengthnonnegative int
Desired length of the output list.
- param_convcallable, optional
Conversion applied to each list element.
None
means no conversion.- keep_nonebool, optional
If
True
,None
is not converted.- return_nonconvbool, optional
If
True
, return also the list where no conversion has been applied.
- Returns:
- plistlist
Input parameter turned into a list of length
length
.- nonconvlist
The same as
plist
, but without conversion. This is only returned ifreturn_nonconv == True
.
Examples
Turn input into a list of given length, possibly by broadcasting. By default, no conversion is performed.
>>> normalized_scalar_param_list((1, 2, 3), 3) [1, 2, 3] >>> normalized_scalar_param_list((1, None, 3.0), 3) [1, None, 3.0]
Single parameters are broadcast to the given length.
>>> normalized_scalar_param_list(1, 3) [1, 1, 1] >>> normalized_scalar_param_list('10', 3) ['10', '10', '10'] >>> normalized_scalar_param_list(None, 3) [None, None, None]
List entries can be explicitly converted using
param_conv
. IfNone
should be kept, setkeep_none
toTrue
:>>> normalized_scalar_param_list(1, 3, param_conv=float) [1.0, 1.0, 1.0] >>> normalized_scalar_param_list('10', 3, param_conv=int) [10, 10, 10] >>> normalized_scalar_param_list((1, None, 3.0), 3, param_conv=int, ... keep_none=True) # default [1, None, 3]
The conversion parameter can be any callable:
>>> def myconv(x): ... return False if x is None else bool(x) >>> normalized_scalar_param_list((0, None, 3.0), 3, param_conv=myconv, ... keep_none=False) [False, False, True]