Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
 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
Ejemplo n.º 4
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
Ejemplo n.º 5
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
Ejemplo n.º 6
0
    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())