def test_generate_jac_manually(self): self.ODE = jitcode(**vanilla) self.ODE.generate_jac_C() self.ODE.set_integrator("vode") self.ODE.set_initial_value(y0) self.assertTrue(_is_C(self.ODE.f)) self.assertTrue(_is_C(self.ODE.jac))
def test_omp(self): self.ODE.generate_f_C(chunk_size=1, do_cse=True) self.ODE.generate_jac_C(chunk_size=1, do_cse=True) self.ODE.generate_helpers_C(chunk_size=1) self.ODE.compile_C(omp=True) self.assertTrue(_is_C(self.ODE.f)) self.assertTrue(_is_C(self.ODE.jac))
def test_save_and_load_with_jac(self): self.ODE = jitcode_lyap(**vanilla, n_lyap=n, wants_jacobian=True) filename = self.ODE.save_compiled(overwrite=True) self.ODE = jitcode_lyap((), n=n, n_lyap=n, module_location=filename) self.ODE.set_integrator("vode") self.assertTrue(_is_C(self.ODE.f)) self.assertTrue(_is_C(self.ODE.jac))
def test_compile_without_jac(self): self.ODE = jitcode(**vanilla) self.ODE.compile_C() self.ODE.set_integrator("LSODA") self.ODE.set_initial_value(y0) self.assertTrue(_is_C(self.ODE.f)) self.assertTrue(_is_C(self.ODE.jac))
def test_generate_jac_manually(self): self.ODE = jitcode(**vanilla) self.ODE.generate_jac_C() self.ODE.set_integrator("vode") self.ODE.set_initial_value(y0) self.assertTrue(_is_C(self.ODE.f)) self.assertTrue(_is_C(self.ODE.jac))
def test_compile_without_jac(self): self.ODE = jitcode(**vanilla) self.ODE.compile_C() self.ODE.set_integrator("LSODA") self.ODE.set_initial_value(y0) self.assertTrue(_is_C(self.ODE.f)) self.assertTrue(_is_C(self.ODE.jac))
def test_save_and_load_with_jac(self): self.ODE = jitcode_lyap(**vanilla,n_lyap=n,wants_jacobian=True) filename = self.ODE.save_compiled(overwrite=True) self.ODE = jitcode_lyap((),n=n,n_lyap=n,module_location=filename) self.ODE.set_integrator("vode") self.assertTrue(_is_C(self.ODE.f)) self.assertTrue(_is_C(self.ODE.jac))
def test_heavily_chunked_jac(self): self.ODE = jitcode(**self.argdict) self.ODE.generate_jac_C(chunk_size=1,do_cse=True) self.ODE.set_integrator('vode') self.ODE.set_initial_value(y0,0.0) self.assertTrue(_is_C(self.ODE.f)) self.assertTrue(_is_C(self.ODE.jac))
def test_omp(self): self.ODE.generate_f_C(chunk_size=1,do_cse=True) self.ODE.generate_jac_C(chunk_size=1,do_cse=True) self.ODE.generate_helpers_C(chunk_size=1) self.ODE.compile_C(omp=True) self.assertTrue(_is_C(self.ODE.f)) self.assertTrue(_is_C(self.ODE.jac))
def test_generate_jac_manually(self): self.ODE = jitcode(**self.argdict) self.ODE.generate_jac_C() self.ODE.set_integrator('dopri5') self.ODE.set_initial_value(y0,0.0) self.assertTrue(_is_C(self.ODE.f)) self.assertTrue(_is_C(self.ODE.jac))
def test_generate_jac_manually(self): self.ODE = jitcode(**self.argdict) self.ODE.generate_jac_C() self.ODE.set_integrator('dopri5') self.ODE.set_initial_value(y0,0.0) self.assertTrue(_is_C(self.ODE.f)) self.assertTrue(_is_C(self.ODE.jac))
def test_lambdas_without_jac(self): self.ODE = jitcode(**self.argdict) self.ODE.generate_lambdas() self.assertIsNone(self.ODE.jac) self.ODE.set_integrator('vode') self.ODE.set_initial_value(y0,0.0) self.assertTrue(_is_C(self.ODE.f)) self.assertTrue(_is_C(self.ODE.jac))
def test_compile_without_jac(self): self.ODE = jitcode(**self.argdict) self.ODE.compile_C() self.assertIsNone(self.ODE.jac) self.ODE.set_integrator('lsoda') self.ODE.set_initial_value(y0,0.0) self.assertTrue(_is_C(self.ODE.f)) self.assertTrue(_is_C(self.ODE.jac))
def test_lambdas_without_jac(self): self.ODE = jitcode(**self.argdict) self.ODE.generate_lambdas() self.assertIsNone(self.ODE.jac) self.ODE.set_integrator('vode') self.ODE.set_initial_value(y0,0.0) self.assertTrue(_is_C(self.ODE.f)) self.assertTrue(_is_C(self.ODE.jac))
def test_default(self): self.ODE.generate_f_C() self.ODE.generate_jac_C() self.ODE.compile_C() if isinstance(self.ODE,jitcode) and self.ODE.f_sym(): self.ODE.check() self.assertTrue(_is_C(self.ODE.f)) self.assertTrue(_is_C(self.ODE.jac))
def test_compile_without_jac(self): self.ODE = jitcode(**self.argdict) self.ODE.compile_C() self.assertIsNone(self.ODE.jac) self.ODE.set_integrator('lsoda') self.ODE.set_initial_value(y0,0.0) self.assertTrue(_is_C(self.ODE.f)) self.assertTrue(_is_C(self.ODE.jac))
def test_default(self): self.ODE.generate_f_C() self.ODE.generate_jac_C() self.ODE.compile_C() if isinstance(self.ODE, jitcode) and self.ODE.f_sym(): self.ODE.check() self.assertTrue(_is_C(self.ODE.f)) self.assertTrue(_is_C(self.ODE.jac))
def test_save_and_load_from_different_directory(self): self.ODE = jitcode(wants_jacobian=True, **self.argdict) self.ODE.save_compiled(self.filename, overwrite=True) shutil.move(self.filename,self.tmpfile(self.filename)) self.ODE = ode_from_module_file(self.tmpfile(self.filename)) self.ODE.set_integrator('lsoda') self.ODE.set_initial_value(y0,0.0) self.assertTrue(_is_C(self.ODE.f)) self.assertTrue(_is_C(self.ODE.jac))
def test_save_and_load_from_different_directory(self): self.ODE = jitcode(wants_jacobian=True, **self.argdict) self.ODE.save_compiled(self.filename, overwrite=True) shutil.move(self.filename,self.tmpfile(self.filename)) self.ODE = ode_from_module_file(self.tmpfile(self.filename)) self.ODE.set_integrator('lsoda') self.ODE.set_initial_value(y0,0.0) self.assertTrue(_is_C(self.ODE.f)) self.assertTrue(_is_C(self.ODE.jac))
def test_save_with_default_name_and_load(self): self.ODE = jitcode(wants_jacobian=True, **self.argdict) self.ODE.save_compiled("", overwrite=True) self.filename = self.ODE._modulename + ".so" shutil.move(self.filename,self.tmpfile(self.filename)) self.ODE = ode_from_module_file(self.tmpfile(self.filename)) self.ODE.set_integrator('lsoda') self.ODE.set_initial_value(y0,0.0) self.assertTrue(_is_C(self.ODE.f)) self.assertTrue(_is_C(self.ODE.jac))
def test_save_with_default_name_and_load(self): self.ODE = jitcode(wants_jacobian=True, **self.argdict) self.ODE.save_compiled("", overwrite=True) self.filename = self.ODE._modulename + ".so" shutil.move(self.filename,self.tmpfile(self.filename)) self.ODE = ode_from_module_file(self.tmpfile(self.filename)) self.ODE.set_integrator('lsoda') self.ODE.set_initial_value(y0,0.0) self.assertTrue(_is_C(self.ODE.f)) self.assertTrue(_is_C(self.ODE.jac))
def test_save_and_load_with_jac(self): self.ODE = jitcode(wants_jacobian=True, **self.argdict) self.ODE.save_compiled(self.filename, overwrite=True) target = os.path.join(self.directory,self.filename) shutil.move(self.filename,target) self.ODE = ode_from_module_file(target) self.ODE.set_integrator('dopri5') self.ODE.set_initial_value(y0,0.0) self.assertTrue(_is_C(self.ODE.f)) self.assertTrue(_is_C(self.ODE.jac))
def test_save_and_load_with_jac(self): self.ODE = jitcode(wants_jacobian=True, **self.argdict) self.ODE.save_compiled(self.filename, overwrite=True) target = os.path.join(self.directory,self.filename) shutil.move(self.filename,target) self.ODE = ode_from_module_file(target) self.ODE.set_integrator('dopri5') self.ODE.set_initial_value(y0,0.0) self.assertTrue(_is_C(self.ODE.f)) self.assertTrue(_is_C(self.ODE.jac))
def test_normal_integration(self): for lambdas in (True,False): for integrator in integrators: with self.subTest(integrator=integrator,lambdas=lambdas): ODE = jitcode(**vanilla) if lambdas: ODE.generate_f_lambda() ODE.generate_jac_lambda() ODE.set_integrator(integrator[0]) assert ODE._wants_jacobian == integrator[1] assert not _is_C(ODE.f) == lambdas assert _is_lambda(ODE.f) == lambdas if integrator[1]: assert _is_lambda(ODE.jac) == lambdas assert not _is_C(ODE.jac) == lambdas ODE.set_initial_value(y0,0.0) assert_allclose( ODE.integrate(1.0), y1, rtol=1e-3 )
def test_save_and_load(self): self.ODE = jitcode(**vanilla) filename = self.ODE.save_compiled(overwrite=True) self.ODE = jitcode(n=n,module_location=filename) self.ODE.set_integrator("RK45") self.ODE.set_initial_value(y0) self.assertTrue(_is_C(self.ODE.f)) self.assertIsNone(self.ODE.jac)
def test_save_and_load(self): self.ODE = jitcode(**vanilla) filename = self.ODE.save_compiled(overwrite=True) self.ODE = jitcode(n=n, module_location=filename) self.ODE.set_integrator("RK45") self.ODE.set_initial_value(y0) self.assertTrue(_is_C(self.ODE.f)) self.assertIsNone(self.ODE.jac)
def test_normal_integration(self): for lambdas in (True, False): for integrator in integrators: with self.subTest(integrator=integrator, lambdas=lambdas): ODE = jitcode(**vanilla) if lambdas: ODE.generate_f_lambda() ODE.generate_jac_lambda() ODE.set_integrator(integrator[0]) assert ODE._wants_jacobian == integrator[1] assert not _is_C(ODE.f) == lambdas assert _is_lambda(ODE.f) == lambdas if integrator[1]: assert _is_lambda(ODE.jac) == lambdas assert not _is_C(ODE.jac) == lambdas ODE.set_initial_value(y0, 0.0) assert_allclose(ODE.integrate(1.0), y1, rtol=1e-3)
def test_callback(self): ODE = jitcode(**callback) ODE.generate_f_C() ODE.compile_C() ODE.check() self.assertTrue(_is_C(ODE.f)) ODE._initialise(*[fun for _, fun, _ in callback["callback_functions"]]) assert_allclose(ODE.f(0.0, y0), f_of_y0, rtol=1e-5)
def test_save_to_directory_and_load(self): self.ODE = jitcode(**self.argdict) self.ODE.compile_C(modulename=modulename) self.ODE.save_compiled(self.tmpfile(""), overwrite=True) self.ODE = ode_from_module_file(self.tmpfile(self.filename)) self.ODE.set_integrator('dopri5') self.ODE.set_initial_value(y0,0.0) self.assertTrue(_is_C(self.ODE.f)) self.assertIsNone(self.ODE.jac)
def test_save_to_directory_and_load(self): self.ODE = jitcode(**self.argdict) self.ODE.compile_C(modulename=modulename) self.ODE.save_compiled(self.tmpfile(""), overwrite=True) self.ODE = ode_from_module_file(self.tmpfile(self.filename)) self.ODE.set_integrator('dopri5') self.ODE.set_initial_value(y0,0.0) self.assertTrue(_is_C(self.ODE.f)) self.assertIsNone(self.ODE.jac)
def test_initial_value_first(self): self.ODE = jitcode(**self.argdict) self.ODE.set_initial_value(y0,0.0) self.ODE.set_integrator('dop853') self.assertTrue(_is_C(self.ODE.f)) self.assertIsNotNone(self.ODE.jac)
def test_standard_order(self): self.ODE = jitcode(**vanilla) self.ODE.set_integrator("dopri5") self.ODE.set_initial_value(y0) self.assertTrue(_is_C(self.ODE.f)) self.assertIsNone(self.ODE.jac)
def test_standard_order_with_jac(self): self.ODE = jitcode(**vanilla) self.ODE.set_integrator("lsoda") self.ODE.set_initial_value(y0) self.assertTrue(_is_C(self.ODE.f)) self.assertTrue(_is_C(self.ODE.jac))
def test_initalise_with_dict(self): self.ODE = jitcode(**vanilla) initial_value = {y(i): y0[i] for i in range(n)} self.ODE.set_initial_value(initial_value) self.ODE.set_integrator("dop853") self.assertTrue(_is_C(self.ODE.f))
def test_initialise_first(self): self.ODE = jitcode(**vanilla) self.ODE.set_initial_value(y0) self.ODE.set_integrator("dop853") self.assertTrue(_is_C(self.ODE.f))
def test_standard_order_with_jac(self): self.ODE = jitcode(**vanilla) self.ODE.set_integrator("lsoda") self.ODE.set_initial_value(y0) self.assertTrue(_is_C(self.ODE.f)) self.assertTrue(_is_C(self.ODE.jac))
def test_standard_order(self): self.ODE = jitcode(**vanilla) self.ODE.set_integrator("dopri5") self.ODE.set_initial_value(y0) self.assertTrue(_is_C(self.ODE.f)) self.assertIsNone(self.ODE.jac)
def test_initialise_first(self): self.ODE = jitcode(**vanilla) self.ODE.set_initial_value(y0) self.ODE.set_integrator("dop853") self.assertTrue(_is_C(self.ODE.f))
def test_initial_value_first(self): self.ODE = jitcode(**self.argdict) self.ODE.set_initial_value(y0,0.0) self.ODE.set_integrator('dop853') self.assertTrue(_is_C(self.ODE.f)) self.assertIsNotNone(self.ODE.jac)
def test_standard_order(self): self.ODE = jitcode(**self.argdict) self.ODE.set_integrator('dopri5') self.ODE.set_initial_value(y0,0.0) self.assertTrue(_is_C(self.ODE.f)) self.assertIsNone(self.ODE.jac)
def test_standard_order_with_jac(self): self.ODE = jitcode(**self.argdict) self.ODE.set_integrator('vode') self.ODE.set_initial_value(y0,0.0) self.assertTrue(_is_C(self.ODE.f)) self.assertTrue(_is_C(self.ODE.jac))
def test_heavily_chunked_f(self): self.ODE = jitcode(wants_jacobian=True, **self.argdict) self.ODE.generate_f_C(chunk_size=1,do_cse=True) self.ODE.set_integrator('dopri5') self.ODE.set_initial_value(y0,0.0) self.assertTrue(_is_C(self.ODE.f))
def test_standard_order_with_jac(self): self.ODE = jitcode(**self.argdict) self.ODE.set_integrator('vode') self.ODE.set_initial_value(y0,0.0) self.assertTrue(_is_C(self.ODE.f)) self.assertTrue(_is_C(self.ODE.jac))
def test_standard_order(self): self.ODE = jitcode(**self.argdict) self.ODE.set_integrator('dopri5') self.ODE.set_initial_value(y0,0.0) self.assertTrue(_is_C(self.ODE.f)) self.assertIsNone(self.ODE.jac)