def sample(value, domain, batch_size=None, name=None): assert isinstance(domain, Domain) if isinstance(value, Field): assert_same_rank( value.rank, domain.rank, 'rank of value (%s) does not match domain (%s)' % (value.rank, domain.rank)) if isinstance(value, CenteredGrid) and value.box == domain.box and np.all( value.resolution == domain.resolution): data = value.data else: point_field = CenteredGrid.getpoints(domain.box, domain.resolution) point_field._batch_size = batch_size data = value.at(point_field).data else: # value is constant if callable(value): x = CenteredGrid.getpoints( domain.box, domain.resolution).copied_with( extrapolation=Material.extrapolation_mode( domain.boundaries), name=name) value = value(x) return value components = math.staticshape( value)[-1] if math.ndims(value) > 0 else 1 data = math.add( math.zeros((batch_size, ) + tuple(domain.resolution) + (components, )), value) return CenteredGrid(data, box=domain.box, extrapolation=Material.extrapolation_mode( domain.boundaries), name=name)
def _determine_rank(fields): rank = None for field in fields: if rank is None: rank = field.rank else: assert_same_rank(rank, field.rank, 'All fields must have the same rank') return rank
def _centered_grid(self, data, components=1, dtype=None, name=None, batch_size=None, extrapolation=None): warnings.warn( "Domain.centered_shape and Domain.centered_grid are deprecated. Use CenteredGrid.sample() instead.", DeprecationWarning) from phi.physics.field import CenteredGrid if extrapolation is None: extrapolation = Material.extrapolation_mode(self.boundaries) if callable(data): # data is an initializer shape = self.centered_shape(components, batch_size=batch_size, name=name, extrapolation=extrapolation, age=()) try: data = data(shape, dtype=dtype) except TypeError: data = data(shape) if data.age == (): data._age = 0.0 from phi.physics.field import Field if isinstance(data, Field): assert_same_rank(data.rank, self.rank, 'data does not match Domain') data = data.at(CenteredGrid.getpoints(self.box, self.resolution)) if name is not None: data = data.copied_with(name=name, extrapolation=extrapolation) data._batch_size = batch_size grid = data elif isinstance(data, (int, float)): shape = self.centered_shape(components, batch_size=batch_size, name=name, extrapolation=extrapolation, age=0.0) grid = math.zeros(shape, dtype=dtype) + data else: grid = CenteredGrid(data, box=self.box, extrapolation=extrapolation, name=name) return grid
def sample(value, domain, batch_size=None): assert isinstance(domain, Domain) if isinstance(value, Field): assert_same_rank( value.rank, domain.rank, 'rank of value (%s) does not match domain (%s)' % (value.rank, domain.rank)) if isinstance(value, CenteredGrid) and value.box == domain.box and np.all( value.resolution == domain.resolution): data = value.data else: data = value.sample_at( CenteredGrid.getpoints(domain.box, domain.resolution).data) else: # value is constant components = math.staticshape( value)[-1] if math.ndims(value) > 0 else 1 data = math.zeros((batch_size, ) + tuple(domain.resolution) + (components, )) + value return CenteredGrid(data, box=domain.box, extrapolation=Material.extrapolation_mode( domain.boundaries))
def centered_grid(self, data, components=1, dtype=np.float32, name=None, batch_size=None, extrapolation=None): if extrapolation is None: extrapolation = Material.extrapolation_mode(self.boundaries) if callable(data): # data is an initializer shape = self.centered_shape(components, batch_size=batch_size, name=name, extrapolation=extrapolation, age=()) try: data = data(shape, dtype=dtype) except TypeError: data = data(shape) if data.age == (): data._age = 0.0 if isinstance(data, Field): assert_same_rank(data.rank, self.rank, 'data does not match Domain') data = data.at(CenteredGrid.getpoints(self.box, self.resolution)) if name is not None: data = data.copied_with(name=name, extrapolation=extrapolation) data._batch_size = batch_size grid = data elif isinstance(data, (int, float)): shape = self.centered_shape(components, batch_size=batch_size, name=name, extrapolation=extrapolation, age=0.0) grid = math.zeros(shape, dtype=dtype) + data else: grid = CenteredGrid(data, box=self.box, extrapolation=extrapolation, name=name) return grid
def box(self, box): box = AABox.to_box(box, resolution_hint=self.resolution) assert_same_rank(len(self.data), self.box, 'StaggeredGrid.data does not match box.') return box