PlasmaCalcs.multi_run_analysis.multi_calculator.MultiCalculator
- class PlasmaCalcs.multi_run_analysis.multi_calculator.MultiCalculator
Bases:
DictOfSimilara class to handle multiple calculators.Example:calc1 = PlasmaCalculator(…)calc2 = PlasmaCalculator(…)mc = MultiCalculator({‘c1’:calc1, ‘c2’:calc2})mc.snap = 0 # sets calc.snap=0 for all calcsmc[‘slices’, ‘x’] = 7 # sets calc.slices[‘x’] = 7 for all calcsmc(‘Eheat’) # returns list of calc(‘Eheat’) for all calcs- __init__(*args, **kwargs)
Methods
__init__(*args, **kwargs)apply(func, *args, **kw)callattrs(attr, *args[, dos_verbose])clear()copy()from_canon(makecalc, *[, dir, exclude, ...])fromkeys([value])get(key[, default])getattrs(attr[, default])getitems(i)items()keys()pop(k[,d])popitem()setattrs(attr, value)setdefault(key[, default])setitems(i, value)subset([keep, drop])to_da([dim, ds, da_dim, var, drop_coords, ...])to_ds([da_dim, var, drop_coords, ...])to_xr([dim, da_dim, var, drop_coords, ...])update([E, ]**F)values()Attributes
REPR_ITEM_MAXLEN- property SIMILAR_ATTRS
- SIMILAR_ATTRS for self; operations on self will be broadcasted to these attrs,e.g. self.snap = 0 –> [calc.snap for calc in self.values()], if ‘snap’ in SIMILAR_ATTRS.
- apply(func, *args, **kw)
- property ca
- alias to callattrs
- callattrs(attr, *args, dos_verbose=False, **kw)
-
- dos_verbose: bool or number
- whether to print progress updates from DictOfSimilar while looping.False or <=0 –> no updatesTrue –> updates every 5 seconds>=2 and <5 –> updates every 2 seconds>=5 –> updates every loop iteration
- clear() None. Remove all items from D.
- cls_new
alias of
DictOfSimilar
- copy() a shallow copy of D
- property do
- alias to apply
- classmethod from_canon(makecalc, *, dir='.', exclude=[], singles=True, abbrv=True)
- return MultiCalculator from canonical runs within directory (and subdirectories).A run is “canonical” if in a ‘run’ or ‘runs’ parameter in a _canon.txt file.Paths in _canon.txt file are relative to the same directory as the _canon.txt file.
- makecalc: callable
- function to make a calculator, given abspath of run’s directory.
- dir: str
- directory to search for _canon.txt files.
- exclude: str, or list of strs
- exclude any subdirectories whose name equals one of these strings or re.fullmatch one of these strings.E.g. exclude=’*[.]io’ will exclude all subdirectories whose name ends with ‘.io’;exclude=’parallel’ will exclude all subdirectories whose name equals ‘parallel’.
- singles: bool
- if True, assert all run lists from _canon.txt files have length 1,and replace each runlist with runlist[0].
- abbrv: bool
- whether to use abbreviated names for result keys and calculator titles.abbreviated names determined by removing os.path.commonpath() of run dirs.calculator titles set via calculator.title = abbrv_name, for each calculator.
- fromkeys(value=None, /)
- Create a new dictionary with keys from iterable and values set to value.
- property ga
- alias to getattrs
- get(key, default=None, /)
- Return the value for key if key is in the dictionary, else default.
- getattrs(attr, default=UNSET)
- get obj.attr for each object in self.
- getitems(i)
- get obj[i] for each object in self.
- property gi
- alias to getitems
- items() a set-like object providing a view on D's items
- keys() a set-like object providing a view on D's keys
- pop(k[, d]) v, remove specified key and return the corresponding value.
- If key is not found, default is returned if given, otherwise KeyError is raised
- popitem()
- Remove and return a (key, value) pair as a 2-tuple.Pairs are returned in LIFO (last-in, first-out) order.Raises KeyError if the dict is empty.
- property sa
- alias to setattrs
- setattrs(attr, value)
- set obj.attr = value for each object in self.
- setdefault(key, default=None, /)
- Insert key with a value of default if key is not in the dictionary.Return the value for key if key is in the dictionary, else default.
- setitems(i, value)
- set obj[i] = value for each object in self.
- property si
- alias to setitems
- subset(keep=None, *, drop=None)
- return DictOfSimilar like self but with only a subset of the keys from self.
- keep: None, iterable, or callable
- None –> no restrictions from
keepiterable –> only keep self[k] for k in keep.callable –> only keep (k,v) from self.items() if keep(k, v). - drop: None, iterable, or callable
- None –> no restrictions from
dropiterable –> drop self[k] for k in drop.callable –> drop (k,v) from self.items() if drop(k, v).
If any conflict between drop and keep, drop takes priority.(E.g. if ‘key1’ in keep and in drop, it will be dropped, not kept.)
- property title
- return a title for self: f’{calc1.title}|{calc2.title}|…|{calcN.title}’.
- to_da(dim='variable', *, ds=False, da_dim=None, var=None, drop_coords=False, str_coords=False, item=False, errors_ok=False, **kw_to_ds)
- return DataArray based on values in self.The default behavior of this method is equivalent to:return xr.Dataset(self).to_dataarray(dim=dim)The other inputs enable to do some processing steps on self.values first.return self.to_ds(**kw).to_dataarray(dim=dim)
- dim: str
- name of new dimension, across which to stack the data_vars from the dataset.
- ds: bool
- whether to convert result back into a Dataset.shorthand for the pattern:self.to_ds(dim, da_dim=’dadim’, **kw).to_dataset(‘dadim’)Useful e.g. if self.values are datasets already,and the goal is to end up with a Dataset just like each value in self,but with the result also having the new
dimdimension (with size==len(self))if True, cannot also provideda_dim, and internally uses da_dim=’__da_dim_internal__’
Docs for to_ds() copied below, for convenience:———————————————–error indicating an issue with binding; see tools.binding.
- to_ds(da_dim=None, *, var=None, drop_coords=False, str_coords=False, item=False, errors_ok=False)
- return Dataset based on values in self.The default behavior of this method is equivalent to:return xr.Dataset(self)The main reason to use to_ds is to do common processing steps on the values first.No processing steps will be attempted by default.Providing inputs can enable various steps, in this order:(1) replace values with value[var](2) convert values to DataArray via value.to_dataarray(da_dim)(3) drop some coords from each value(4) convert values’ coords to strings via xarray_str_coords(5) convert values to scalars via value.item()Input options described below.
- var: None, str, or iterable of str.
- if provided, will get value[var] for each value in self.
- da_dim: None or str
- if provided, will call value.to_dataarray(da_dim) for each value in self.
- drop_coords: bool, str, or list of strs
- whether to call value.drop_vars(…) for each value in self.True –> value.drop_vars(value.coods)str or list of strs –> value.drop_vars(drop_coords)
- str_coords: bool, str, or list of strs
- whether to call xarray_str_coords on each value in self.True –> converts all coords’ values to strs.str or list of strs –> xarray_str_coords(value, str_coords, promote=True)
- item: bool
- whether to call value.item() for each value in self.
- errors_ok: bool
- whether to ignore simple errors during processing.if True:var non-None but value not dict or Dataset –> skip this step.da_dim non-None but values are not Datasets –> skip this step.drop_coords –> value.drop_vars(drop_coords, errors=’ignore’).str_coords –> xarray_str_coords(value, str_coords, missing_ok=True).item but value.item() fails with ValueError or AttributeError –> skip this step.
Example:mc = pc.MultiCalculator(…)dos = mc(‘mean_n’, snap=7) # depends on ‘fluid’ dim, but also has ‘snap’ and ‘t’ coords.n_vals = dos.to_ds(str_coords=’fluid’, drop_coords=(‘snap’, ‘t’))# str_coords=’fluid’ because ‘fluid’ might be different objects for each calculator# drop_coords=(‘snap’, ‘t’) because ‘snap’ and ‘t’ info won’t necessarily agree across all calculators.
- to_xr(dim='variable', da_dim=None, *, var=None, drop_coords=False, str_coords=False, item=False, errors_ok=False, **kw_to_ds)
- return xarray.DataArray or Dataset, stacking values in self along the new dimension.This is shorthand for self.to_da() or self.to_ds()(depending on
da_dimand whether self.values are already xarray.Dataset objects).- dim: str
- the new dimension, along which to stack values from self.
- da_dim: None or str
- if provided, will call value.to_dataarray(da_dim) for each value in self.
If da_dim provided or if there are no Dataset values in self,result will be a DataArray, as per self.to_da(dim, ds=False, da_dim=da_dim, **kw).Otherwise, if all self.values are Datasets,result will be a Dataset, as per self.to_da(dim, ds=True, da_dim=None).Otherwise (only some values are Datasets, and da_dim not provided),crash with InputError.The remaining kwargs go to self.to_ds() (see help(self.to_ds) for details):- var: None, str, or iterable of str.
- if provided, will get value[var] for each value in self.
- drop_coords: bool, str, or list of strs
- whether to call value.drop_vars(…) for each value in self.
- str_coords: bool, str, or list of strs
- whether to call xarray_str_coords on each value in self.
- item: bool
- whether to call value.item() for each value in self.
- errors_ok: bool
- whether to ignore simple errors during processing.
- update([E, ]**F) None. Update D from dict/iterable E and F.
- If E is present and has a .keys() method, then does: for k in E: D[k] = E[k]If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = vIn either case, this is followed by: for k in F: D[k] = F[k]
- values() an object providing a view on D's values