PlasmaCalcs.dimensions.components.ComponentHaver
- class PlasmaCalcs.dimensions.components.ComponentHaver(*, component=None, components=[Component('x', 0), Component('y', 1), Component('z', 2)], **kw)
Bases:
DimensionHaverclass which “has” a ComponentDimension. (ComponentDimension instance will be at self.component_dim)self.component stores the current vector component (possibly multiple). If None, use self.components instead.self.components stores “all possible vector components” for the ComponentHaver.Additionally, has various helpful methods for working with the ComponentDimension,e.g. current_n_component, iter_components, take_component.See ComponentDimension.setup_haver for details.components defaults to XYZ (==ComponentList.from_strings(‘xyz’))- __init__(*, component=None, components=[Component('x', 0), Component('y', 1), Component('z', 2)], **kw)
Methods
__init__(*[, component, components])as_single_dimpoint([values, dims])assign_dim_coords(array, *dims[, skip])check_pickle([x])current_n_dimpoints([dims])dim_values([dims])dims_apply(funcname, *args_func[, dims])dims_get(attr[, dims])enumerate_dimpoints([dims, all])get_behavior([keys])get_first_dimpoint([dims, enumerate])get_ncpu()iter_dimpoints([dims, all, restore, enumerate])load_across_dims(loader, *args_loader[, ...])load_across_dims_implied_by(var, loader, ...)maintaining_attrs(*attrs, **attrs_as_flags)pop_dim_keys(kw)set_attrs(**attrs)using_attrs([attrs_as_dict, _unset_sentinel])using_first_dimpoint([dims])Attributes
cls_behavior_attrs- property array_MBmax
- UNSET, None, or numbermaximum result size allowed, in Megabytes.will raise a MemorySizeError if result size would be larger than this.UNSET –> use DEFAULTS.ARRAY_MBYTES_MAX (default: 1000 MB).None –> no limit.Assumes that each result (at each dimpoint) will be the same size.
- as_single_dimpoint(values=None, *, dims=None, **values_as_kw)
- return DimPoint with values for dims, but raise DimensionValueError if any value is_iterable_dim.
- values: None or dict
- values to use for the dimpoint.values will be joined with **values_as_kw; provided any of either will be equivalent.E.g. can use values={‘fluid’: ‘e’} or use fluid=’e’.if any are provided –> use values corresponding to self.{dim}=values[dim] for dim in dims.else –> use values of self.{dim} for dim in dims. (equivalent: self.dims_apply(‘_as_single’, dims=dims))
- dims: None or iterable of strs appearing in self.dimensions.keys()
- dimensions to include.None –> infer dimensions from keys of values (and values_as_kw).if no values were provided (values=None, and empty values_as_kw),use all dimensions from self.dimensions.keys().
additional kwargs provide other {dim: value} items.Examples:self.as_single_dimpoint() –> DimPoint({dim: self.{dim} for dim in self.dimensions})self.as_single_dimpoint({‘fluid’: ‘e’}) –> DimPoint({‘fluid’: ‘e’})self.as_single_dimpoint(fluid=’e’) –> DimPoint({‘fluid’: ‘e’})self.as_single_dimpoint({‘fluid’: ‘e’}, snap=0) –> DimPoint({‘fluid’: ‘e’, ‘snap’: 0})self.as_single_dimpoint(dims=[‘fluid’, ‘snap’]) –> DimPoint({‘fluid’: self.fluid, ‘snap’: self.snap})
- property assign_component_along
- alias to self.component_dim.assign_coord_along
- property assign_component_coord
- alias to self.component_dim.assign_coord
- assign_dim_coords(array, *dims, skip=[])
- assign all dimensions in self as coords for array. (self.assign_{dim}_coord(array))Assumes array is an xarray and does not have any dimensions in self.(array is not edited directly; returns result of assigning coords.)
- dims: iterable of dimensions in self
- assign only these dimensions as coords. (use all dimensions if len(dims)==0)
- skip: iterable of dimensions in self
- do not assign these dimensions as coords.
- property behavior
- dict of {attr: self.attr} for attr in self.behavior_attrs. Note dims are separate;dims go in behavior.dims. E.g. Behavior({‘units’:’si’,…}, dims={‘snap’:0,…}).
- property behavior_attrs
- list of attrs in self which control behavior of self.Here, returns self.cls_behavior_attrs.Subclasses could override if any behavior attrs are not known at the class-level,e.g. if MySubclass’s list of behavior attrs varies between instances of MySubclass.
- check_pickle(x=None)
- checks that self (or, x, if provided) is pickleable, by pickling then unpickling.Returns result of unpickling. Useful for debugging.
- property component
- alias to self.component_dim.v
- property component_dim
- component dimension for ComponentHaver.
- component_dim_cls
alias of
ComponentDimension
- property component_is_iterable
- alias to self.component_dim.is_iterable
- property component_list
- alias to self.component_dim.list
- property component_type
- alias to self.component_dim.get_type
- property components
- alias to self.component_dim.values
- property current_n_component
- alias to self.component_dim.current_n
- current_n_dimpoints(dims=None)
- return number of points represented by current values of dims.
- dims: None or iterable of strs appearing in self.dimensions.keys()
- dimensions to consider. None –> use all dimensions.
E.g. current_n_dimpoints(self, dims=[‘fluid’, ‘snap’]) –> number of (fluid, snap) points;e.g. 3 fluids and 2 snaps –> 6 points.Note, for classes using maindims, maindims are not included in the number of dimpoints.Equivalent to len(list(self.iter_dimpoints(dims=dims, current=True)))
- dim_values(dims=None)
- return dict of current values for dimensions in self.
- dims: None or iterable
- if provided, only include these dimensions.
Equivalent: DimRegion(self.dims_get(‘v’, dims=dims))
- property dimensions
- dict of dimensions in self; {dimension name: Dimension object}.e.g. {‘fluid’: self.fluid_dim, ‘snap’: self.snap_dim, …}.
- property dims
- return dict of current values for dimensions in self. Equivalent: self.dim_values()
- dims_apply(funcname, *args_func, dims=None, **kw_func)
- apply funcname to each dimension in self, with args_func and kw_func.
- dims: None or iterable of strs
- if provided, only apply to these dimensions.
See also: dims_get
- dims_get(attr, dims=None)
- return dict of {dim: getattr(self.dimensions[dim], attr) for dim in dims}.
- dims: None or iterable
- if provided, only include these dimensions.
See also: dims_apply
- property enumerate_component
- alias to self.component_dim.enumerate
- property enumerate_components
- alias to self.component_dim.enumerate_values
- enumerate_dimpoints(dims=None, *, all=False)
- iterate through values of dims, yielding (idx, DimPoint) pairs.idx is a dict of {dim: i} such that DimPoint values are {dim: dims[i] for dim,i in idx.items()}.Also, during iteration, set self.{dim} = value, as with self.iter_dim.Equivalent to self.iter_dimpoints(dims=dims, all=all, enumerate=True)
- get_behavior(keys=None)
- return value of self.behavior.
- keys: None or iterable
- if provided, only include these attrs.from nondim_behavior_attrs, or dims.
- get_first_dimpoint(dims=None, *, enumerate=False)
- return DimPoint taking the first value of each dim in self.dimensions.
- dims: None or iterable of strs appearing in self.dimensions.keys()
- dimensions to include. None –> use all dimensions.
- enumerate: bool
- whether to return (idx, DimPoint) instead of just DimPoint.
- get_ncpu()
- returns ncpu, but if None, return multiprocessing.cpu_count() instead.(This is for convenience; using None will also work with any methods defined here.)
- property iter_component
- alias to self.component_dim.iter
- property iter_components
- alias to self.component_dim.iter_values
- property iter_components_partition
- alias to self.component_dim.iter_partition
- iter_dimpoints(dims=None, *, all=False, restore=True, enumerate=False)
- iterate through values of dims, returning DimPoints and setting dim values during iteration.DimPoints are dicts of {dim: value} for dim in dims, where not is_iterable_dim(value).Also, during iteration, set self.{dim} = value, as with self.iter_dim.
- dims: None or iterable of strs appearing in self.dimensions.keys()
- dimensions to consider. None –> use all dimensions.
- all: bool
- whether to iterate through all possible values, or only the current values.False –> iterate through current values (e.g., self.snap, self.fluid, …).similar to itertools.product(self.iter_snap(), self.iter_fluid(), …)True –> iterate through all possible values (e.g., self.snaps, self.fluid, …)similar to itertools.product(self.iter_snaps(), self.iter_fluids(), …)Equivalent to all=False if all dims are set to None, e.g. self.snap=None, …
- restore: bool
- whether to restore original dim values after iteration.
- enumerate: bool, default False
- whether to yield indices too, i.e. (idx, DimPoint) instead of just DimPoint.idx would be a dict of {dim: i} such that DimPoint values are {dim: dims[i] for dim,i in idx.items()}.
- property join_components
- alias to self.component_dim.join_along
- load_across_dims(loader, *args_loader, dims=[], assign_coords=None, loader0=None, _shift_special={}, **kw_loader)
- return loader(…), iterating & joining across each dimension.
- loader: callable of (*args_loader, **kw_loader) -> xarray.DataArray.
- will call loader to get result values at each combination of dims values in self.(loader will probably depend on dims values from self.)
- dims: iterable of strs or Dimension objects
- load across these Dimensions.loads across the current values (when this method was called) of each dimension,not necessarily “all” values. (e.g., self.snap, not self.snaps)str values –> use self.dimensions[d] (where d is a str in dims).While loading, set dim.loading=True for each dim.
- assign_coords: None or bool, default None
- whether to dim.assign_coord for each result of loader, for each dimension.None –> assign coord only if dim.name not already in array.coords.
- loader0: None or callable
- if provided, use loader0 to get the first array, then use loader for the rest.Internally the first array’s .coords and .attrs are used to label the result;however all other arrays do not need to be converted to xarray.
- _shift_special: UNSET or dict of (dimstr: list of special values)
- workaround to encourage loader0 to be called on a “usual” case, not a special case.if provided, and dimstr in dims, and d=self.dimensions[dimstr] has multiple values,with special_value first, and at least one non-special value later, theninternally rearrange dim values order before loading,then rearrange result back to original order (via indexing).E.g. _shift_special=dict(snap=[INPUT_SNAP]) –> apply loader0 to the first non-INPUT_SNAP,if there are any non-INPUT_SNAP snap values in snap, and ‘snap’ in dims.
— MULTIPROCESSING STRATEGY OPTIONS (from self) —- timeout: None or int
- max duration, in seconds. Must be None or integer (due to limitations of signal.alarm method)None –> no time limit.Note: if time_limit is reached, will raise a TimeoutError and save the result so far.(in this case, any not-yet-calculated values will each be RESULT_MISSING.)# [TODO] make this happen, without making self un-picklable:in case of crash, results so far can be found in self._latest_load_tasks.Then possibly continued via:results = self._latest_load_tasks(…, reset=False, skip_done=True)result = self._load_across_dims_postprocess(results, dims, …)# [TODO] if crashing and resuming is common, make that easier to do^elf.timeout has not been set, use DEFAULTS.LOADING_TIMEOUT (default: None).
- ncpu: None or int
- max number of cpus to use for multiprocessing.None –> use multiprocessing.cpu_count()int –> use this value. if 0 or 1, do not use multiprocessing here.Note: will actually use min(ncpu, number of calls to be made);e.g. if ncpu=4 but len(arg_kw_tuples)=2, will only use 2 cpus.elf.ncpu has not been set, use DEFAULTS.LOADING_NCPU (default: 1).
- ncoarse: int
- if >1, group tasks into groups of size ncoarse before performing them.elf.ncoarse has not been set, use DEFAULTS.LOADING_NCOARSE (default: 1).
- print_freq: None, or number (possibly negative or 0)
- >0 –> Minimum number of seconds between progress updates.=0 –> print every progress update.<0 –> never print progress updates.None –> use DEFAULTS.PROGRESS_UPDATES_PRINT_FREQelf.print_freq has not been set, infer from self.verbose if it exists,use DEFAULTS.PROGRESS_UPDATES_PRINT_FREQ (default: 2).
- load_across_dims_implied_by(var, loader, *args_loader, assign_coords=None, _min_split=1, **kw_loader)
- return loader(…), iterating & joining across each dimension implied by var.Equivalent to self.load_across_dims(loader, …, dims=self.match_var_loading_dims(var)).
- var: str
- variable which implies dims to load across, via self.match_var_loading_dims(var).
- loader: callable of (*args_loader, **kw_loader) -> xarray.DataArray.
- will call loader to get result values at each combination of dims values in self.(loader will probably depend on dims values from self.)
- assign_coords: None or bool, default None
- whether to dim.assign_coord for each result of loader, for each dimension.None –> assign coord only if dim.name not already in array.coords.
- _min_split: int, default 1
- if an implied dim has current_n() < min_split, don’t load across it.1 –> no minimum.
- property maintaining
- alias to maintaining_attrs
- maintaining_attrs(*attrs, **attrs_as_flags)
- returns context manager which restores attrs of self to their original values, upon exit.E.g. maintaining_attrs(obj, ‘attr1’, ‘attr2’, attr3=True, attr4=False)–> will restore upon exit, original values of obj.attr1, attr2, and attr3, but not attr4.
- property ncoarse
- intif >1, group tasks into groups of size ncoarse before performing them.
- property ncpu
- None or intmax number of cpus to use for multiprocessing.None –> use multiprocessing.cpu_count()int –> use this value. if 0 or 1, do not use multiprocessing here.
- Note: will actually use min(ncpu, number of calls to be made);
- e.g. if ncpu=4 but len(arg_kw_tuples)=2, will only use 2 cpus.
see also: self.get_ncpu() to read actual number of cpus when self.ncpu is None.
- property nondim_behavior_attrs
- list of attrs in self which control behavior of self, but which are NOT in self.dimensions.
- pop_dim_keys(kw)
- return ({key: kw.pop(key) for key in self.dimensions if key in kw}, kw).
- property print_freq
- None, or number (possibly negative or 0)>0 –> Minimum number of seconds between progress updates.=0 –> print every progress update.<0 –> never print progress updates.None –> use DEFAULTS.PROGRESS_UPDATES_PRINT_FREQ
- property print_freq_explicit
- like self.print_freq, but converts UNSET to value based on self.verbose,UNSET –> result depends on self.verbose:False or <=0 –> -1True or (>=1 and <5) –> None>=5 –> 0 (i.e. print every progress update)if self.verbose doesn’t exist –> Noneif result would be None, instead give DEFAULTS.PROGRESS_UPDATES_PRINT_FREQ.
- set_attrs(**attrs)
- sets these attrs in self.
- set_pop_dim_attrs(kw)
- set self.{key} = kw.pop(key) for each key in self.dimensions if key in kw.
- property take_component
- alias to self.component_dim.take
- property take_components
- alias to self.component_dim.take_along
- property timeout
- None or intmax duration, in seconds. Must be None or integer (due to limitations of signal.alarm method)None –> no time limit.
- Note: if time_limit is reached, will raise a TimeoutError and save the result so far.
- (in this case, any not-yet-calculated values will each be RESULT_MISSING.)
- property using
- alias to using_attrs
- using_attrs(attrs_as_dict={}, _unset_sentinel=ATTR_UNSET, **attrs_and_values)
- returns context manager which sets attrs of obj upon entry; restores original values upon exit.
- _unset_sentinel: any value, default ATTR_UNSET
- upon entry, delete any attrs with value _unset_sentinel (compared via ‘is’).E.g. using_attrs(obj, _unset_sentinel=None, x=None) –> del obj.x upon entry.
- using_first_dimpoint(dims=None)
- return context manager which sets dimensions to their first values (when called); restore original on exit.Useful for testing a single code at a single dimpoint without needing to set each dimension individually.
- dims: None or iterable of strs appearing in self.dimensions.keys()
- dimensions to include. None –> use all dimensions.