def test_fit(self):
     model = CovidSIRDc()
     X, y = model.iterate2array(derivatives=True)
     with self.assertRaises(TypeError):
         model.fit(X, {})
     with self.assertRaises(ValueError):
         model.fit(X, numpy.array([4]))
     with self.assertRaises(ValueError):
         model.fit(X, numpy.array([[4, 5, 6, 7, 8]]))
     X2 = X.copy()
     X2[0, 0] = -5
     with self.assertRaises(ValueError):
         model.fit(X2, y, learning_rate_init=0.01)
     exp = numpy.array(
         [model['beta'], model['nu'], model['mu'], model['b']])
     model.fit(X, y, verbose=False, max_iter=10, learning_rate_init=0.01)
     coef = numpy.array(
         [model['beta'], model['nu'], model['mu'], model['b']])
     err = numpy.linalg.norm(exp - coef)
     self.assertLess(err, 1e-5)
     model['nu'] = model['mu'] = model['beta'] = 0.1
     buf = io.StringIO()
     with redirect_stdout(buf):
         model.fit(X, y, verbose=True, max_iter=20)
     out = buf.getvalue()
     self.assertIn('20/20', out)
     coef = numpy.array(
         [model['beta'], model['nu'], model['mu'], model['b']])
     err = numpy.linalg.norm(exp - coef)
     self.assertLess(err, 1)
     loss = model.score(X, y)
     self.assertGreater(loss, 0)
     loss = model.score_l1(X, y)
     self.assertGreater(loss, 0)
 def test_noise(self):
     model = CovidSIRDc()
     X, y = model.iterate2array(derivatives=True)
     X2 = model.add_noise(X)
     diff = numpy.abs(X - X2).max()
     self.assertEqual(X.shape, X.shape)
     s1 = numpy.sum(X, axis=1)
     s2 = numpy.sum(X2, axis=1)
     assert_almost_equal(s1, s2)
     self.assertGreater(diff, 1)
 def test_fit_sirc_simulate(self):
     model = CovidSIRDc()
     X, y = model.iterate2array(derivatives=True)
     epi = EpidemicRegressor('sirc', max_iter=10)
     epi.fit(X, y)
     sim = epi.simulate(X[4:6])
     self.assertEqual(sim.shape, (2, 7, 4))
     self.assertEqual(X[4].tolist(), sim[0, 0].tolist())
     self.assertEqual(X[5].tolist(), sim[1, 0].tolist())
     sim = epi.simulate(numpy.array([[10000., 0, 0, 0]]))
     self.assertEqual(sim[0].tolist(), sim[-1].tolist())
 def test_fit_sirc(self):
     model = CovidSIRDc()
     X, y = model.iterate2array(derivatives=True)
     epi = EpidemicRegressor('sirc', max_iter=10)
     with self.assertRaises(RuntimeError):
         epi.score(X, y)
     with self.assertRaises(RuntimeError):
         epi.predict(X)
     epi.fit(X, y)
     loss = epi.score(X, y)
     self.assertGreater(loss, 0)
 def test_predict(self):
     model = CovidSIRDc()
     sim = list(model.iterate(derivatives=True))
     self.assertIsInstance(sim, list)
     X = model.iterate2array(derivatives=False)
     self.assertIsInstance(X, numpy.ndarray)
     X, y = model.iterate2array(derivatives=True)
     self.assertEqual(X.shape, y.shape)
     y2 = model.predict(X)
     assert_almost_equal(y / 100, y2 / 100, decimal=6)
     with self.assertRaises(TypeError):
         model.predict({})
     with self.assertRaises(ValueError):
         model.predict(numpy.array([4]))
     with self.assertRaises(ValueError):
         model.predict(numpy.array([[4, 5, 6, 7, 8]]))
     X2 = X.copy()
     X2[0, 0] -= 50
     with self.assertRaises(ValueError):
         model.predict(X2)
     X2 = X.copy()
     X2[:, 0] -= 50
     with self.assertRaises(ValueError):
         model.predict(X2)