def test_num_per_timestep(self): 'test ContinuousRelease when a fixed rate per timestep is given' r = ContinuousRelease(self.rel_time, self.pos, initial_elements=1000, num_per_timestep=100) assert r.num_elements is None assert r.num_elements_to_release(self.rel_time, 100) == 1100 r.initial_done = True for ts in (200, 400): num = r.num_elements_to_release(self.rel_time, ts) assert num == 100
def test_num_per_timestep_release_elements(self): 'release elements in the context of a spill container' # todo: need a test for a line release where rate is given - to check # positions are being initialized correctly end_time = self.rel_time + timedelta(hours=1) release = ContinuousRelease(self.rel_time, self.pos, num_per_timestep=100, initial_elements=1000, end_release_time=end_time) s = Spill(release) sc = SpillContainer() sc.spills += s sc.prepare_for_model_run() for ix in range(5): time = self.rel_time + timedelta(seconds=900 * ix) num_les = sc.release_elements(900, time) if time <= s.end_release_time: if ix == 0: assert num_les == 1100 else: assert num_les == 100 assert sc.num_released == 100 + ix * 100 + 1000 else: assert num_les == 0
def test_property_num_per_timestep_elements(self): ''' test either num_elements or num_per_timestep is set but not both also test the num_elements_to_release references correct method ''' r = ContinuousRelease(self.rel_time, self.pos, initial_elements=100, num_per_timestep=100) r.num_elements = 10 assert r.num_per_timestep is None assert r.num_elements_to_release(self.rel_time, 900) == 110 r.num_per_timestep = 100 assert r.num_elements is None assert r.num_elements_to_release(self.rel_time, 900) == 200
with pytest.raises(AttributeError): rel.something_weird # todo: add other release to this test - need schemas for all rel_time = datetime(2012, 8, 20, 13) rel_type = [ PointLineRelease(release_time=rel_time, num_elements=5, start_position=(0, 0, 0)), PointLineRelease(release_time=rel_time, num_per_timestep=5, start_position=(0, 0, 0)), ContinuousRelease(initial_elements=5, release_time=rel_time, num_per_timestep=5, start_position=(0, 0, 0)) ] # SpatialRelease(rel_time, np.zeros((4, 3), dtype=np.float64))] @pytest.mark.parametrize("rel_type", rel_type) def test_release_serialization_deserialization(rel_type): ''' test for a mid run state. 'save' preserves midrun parameters 'webapi' does not ''' cls = rel_type.__class__ rel_type.num_released = 100 # read only parameter for releases n_rel = cls.deserialize(rel_type.serialize())