def test_Model_predict_percept(): # A None Model has nothing to build, nothing to perceive: model = Model() npt.assert_equal(model.predict_percept(ArgusI()), None) npt.assert_equal(model.predict_percept(ArgusI(stim={'A1': 1})), None) npt.assert_equal( model.predict_percept(ArgusI(stim={'A1': 1}), t_percept=[0, 1]), None) # Just the spatial model: model = Model(spatial=ValidSpatialModel()).build() npt.assert_equal(model.predict_percept(ArgusI()), None) # Just the temporal model: model = Model(temporal=ValidTemporalModel()).build() npt.assert_equal(model.predict_percept(ArgusI()), None) # Invalid calls: model = Model(spatial=ValidSpatialModel(), temporal=ValidTemporalModel()) with pytest.raises(NotBuiltError): # Must call build first: model.predict_percept(ArgusI()) model.build() with pytest.raises(ValueError): # Cannot request t_percepts that are not multiples of dt: model.predict_percept(ArgusI(stim=np.ones(16)), t_percept=[0.1, 0.11]) with pytest.raises(ValueError): # stim.time==None but requesting t_percept != None model.predict_percept(ArgusI(stim=np.ones(16)), t_percept=[0, 1, 2]) with pytest.raises(TypeError): # Must pass an implant: model.predict_percept(Stimulus(3))
def test_Model_build(): # A None model: model = Model() # Nothing to build, so `is_built` is always True (we want to be able to # call `predict_percept`): npt.assert_equal(model.is_built, True) model.build() npt.assert_equal(model.is_built, True) # SpatialModel, but no TemporalModel: model = Model(spatial=ValidSpatialModel()) npt.assert_equal(model.is_built, False) model.build() npt.assert_equal(model.is_built, True) # TemporalModel, but no SpatialModel: model = Model(temporal=ValidTemporalModel()) npt.assert_equal(model.is_built, False) model.build() npt.assert_equal(model.is_built, True) # SpatialModel and TemporalModel: model = Model(spatial=ValidSpatialModel(), temporal=ValidTemporalModel()) npt.assert_equal(model.is_built, False) model.build() npt.assert_equal(model.is_built, True)