def test_read_write_methods(): for item in methods: kwargs = { "channels": ["93Nb"], "spectral_dimensions": [{ "count": 1024, "spectral_width": 100 } for _ in range(item.ndim)], } if item.__name__ == "SSB2D": kwargs["rotor_frequency"] = 1e3 fn1 = item(**kwargs) # Parse against self assert_parsing(item, fn1) # Parse against Method class assert_parsing(Method, fn1) # Parse against Method1D/Method2D classes mth_d = Method1D if item.ndim == 1 else Method2D assert_parsing(mth_d, fn1) # save test sim = Simulator(spin_systems=[sys], methods=[fn1]) # save/load with units sim.run() sim.save("test.mrsim") sim2 = Simulator.load("test.mrsim") check_sim_save(sim, sim2, "with units") # save/load with out units sim.run() sim.save("test.mrsim", with_units=False) sim2 = Simulator.load("test.mrsim", parse_units=False) check_sim_save(sim, sim2, "without units") # save/load methods sim.run() sim.export_methods("test.mrmtd") sim2 = sim.copy() sim2.load_methods("test.mrmtd") check_methods_save_load(sim, sim2) # save/load spin systems sim.run() sim.export_spin_systems("test.mrsys") sim2 = sim.copy() sim2.load_spin_systems("test.mrsys") assert sim.spin_systems == sim2.spin_systems os.remove("test.mrsim") os.remove("test.mrsys") os.remove("test.mrmtd")
def test_sim_coesite(): # coesite O17_1 = Site( isotope="17O", isotropic_chemical_shift=29, quadrupolar=dict(Cq=6.05e6, eta=0.000), ) O17_2 = Site( isotope="17O", isotropic_chemical_shift=41, quadrupolar=dict(Cq=5.43e6, eta=0.166), ) O17_3 = Site( isotope="17O", isotropic_chemical_shift=57, quadrupolar=dict(Cq=5.45e6, eta=0.168), ) O17_4 = Site( isotope="17O", isotropic_chemical_shift=53, quadrupolar=dict(Cq=5.52e6, eta=0.169), ) O17_5 = Site( isotope="17O", isotropic_chemical_shift=58, quadrupolar=dict(Cq=5.16e6, eta=0.292), ) sites = [O17_1, O17_2, O17_3, O17_4, O17_5] abundance = [0.83, 1.05, 2.16, 2.05, 1.90] # abundance of each spin system spin_systems = [ SpinSystem(sites=[s], abundance=a) for s, a in zip(sites, abundance) ] method = BlochDecayCTSpectrum( channels=["17O"], rotor_frequency=14000, spectral_dimensions=[{ "count": 2048, "spectral_width": 50000 }], ) sim_coesite = Simulator() sim_coesite.spin_systems += spin_systems sim_coesite.methods += [method] sim_coesite.save("sample.mrsim") sim_load = Simulator.load("sample.mrsim") assert sim_coesite == sim_load os.remove("sample.mrsim")
def test_simulator_2(): sim = Simulator() sim.spin_systems = [ SpinSystem( sites=[Site(isotope="1H"), Site(isotope="23Na")], couplings=[Coupling(site_index=[0, 1], isotropic_j=15)], ) ] sim.methods = [ BlochDecaySpectrum( channels=["1H"], spectral_dimensions=[{ "count": 10 }], experiment=cp.as_csdm(np.arange(10)), ) ] sim.name = "test" sim.label = "test0" sim.description = "testing-testing 1.2.3" sim.run() # save sim.save("test_sim_save.temp") sim_load = Simulator.load("test_sim_save.temp") sim_load_data = sim_load.methods[0].simulation sim_data = sim.methods[0].simulation sim_load_data._timestamp = "" assert sim_load_data.dict() == sim_data.dict() sim_load.methods[0].simulation = None sim.methods[0].simulation = None assert sim_load.spin_systems == sim.spin_systems assert sim_load.methods == sim.methods assert sim_load.name == sim.name assert sim_load.description == sim.description os.remove("test_sim_save.temp")
def test_read_write_methods(): def assert_parsing(method, fn1): fn2 = method.parse_dict_with_units(fn1.json()) assert fn1 == fn2, f"Error with {method} parse with units." fn3 = method(**fn1.json(units=False)) assert fn1 == fn3, f"Error with {method} parse with units." event_error = "Event objects are immutable for" serialize = fn1.json() ent = serialize["spectral_dimensions"][0]["events"] ent[0]["transition_query"][0]["ch1"]["P"] = [-100] if method not in [Method, Method1D, Method2D]: with pytest.raises(ImmutableEventError, match=f".*{event_error}.*"): method.parse_dict_with_units(serialize) with pytest.raises(ImmutableEventError, match=f".*{event_error}.*"): method(**serialize) with pytest.raises(ImmutableEventError, match=f".*{event_error}.*"): ent.append({"transition_query": [{"ch1": {"P": [-100]}}]}) method.parse_dict_with_units(serialize) def check_sim_save(sim1, sim2, message): for mth in sim2.methods: mth.simulation._timestamp = "" _ = [ item.to("ppm", "nmr_frequency_ratio") for item in mth.simulation.x ] data1 = sim.methods[0].simulation.copy() sim.methods[0].simulation = None data2 = sim2.methods[0].simulation.copy() sim2.methods[0].simulation = None assert data1 == data2, f"data saved and loaded is not equal: type {message}." assert sim == sim2, f".mrsim saved and loaded is not equal: type {message}." for item in methods: kwargs = { "channels": ["93Nb"], "spectral_dimensions": [{ "count": 1024, "spectral_width": 100 } for _ in range(item.ndim)], } if item.__name__ == "SSB2D": kwargs["rotor_frequency"] = 1e3 fn1 = item(**kwargs) # Parse against self assert_parsing(item, fn1) # Parse against Method class assert_parsing(Method, fn1) # Parse against Method1D/Method2D classes mth_d = Method1D if item.ndim == 1 else Method2D assert_parsing(mth_d, fn1) # save test sim = Simulator(spin_systems=[sys], methods=[fn1]) # save/load with units sim.run() sim.save("test.mrsim") sim2 = Simulator.load("test.mrsim") check_sim_save(sim, sim2, "with units") # save/load with out units sim.run() sim.save("test.mrsim", with_units=False) sim2 = Simulator.load("test.mrsim", parse_units=False) check_sim_save(sim, sim2, "without units") os.remove("test.mrsim")
def test_simulator_1(): sim = Simulator() sim.spin_systems = [SpinSystem(sites=[Site(isotope="1H"), Site(isotope="23Na")])] sim.methods = [BlochDecaySpectrum(channels=["1H"])] sim.name = "test" sim.label = "test0" sim.description = "testing-testing 1.2.3" red_dict = sim.json(units=False) _ = [item.pop("description") for item in red_dict["methods"]] assert red_dict == { "name": "test", "label": "test0", "description": "testing-testing 1.2.3", "spin_systems": [ { "sites": [ {"isotope": "1H", "isotropic_chemical_shift": 0.0}, {"isotope": "23Na", "isotropic_chemical_shift": 0.0}, ], } ], "methods": [ { "channels": ["1H"], "name": "BlochDecaySpectrum", "magnetic_flux_density": 9.4, "rotor_angle": 0.9553166181245, "rotor_frequency": 0.0, "spectral_dimensions": [ { "count": 1024, "events": [{"transition_queries": [{"ch1": {"P": [-1]}}]}], "spectral_width": 25000.0, } ], } ], "config": { "decompose_spectrum": "none", "integration_density": 70, "integration_volume": "octant", "number_of_sidebands": 64, }, } # save sim.save("test_sim_save.temp") sim_load = Simulator.load("test_sim_save.temp") assert sim_load.spin_systems == sim.spin_systems assert sim_load.methods == sim.methods assert sim_load.name == sim.name assert sim_load.description == sim.description assert sim_load == sim # without units sim.save("test_sim_save_no_unit.temp", with_units=False) sim_load = Simulator.load("test_sim_save_no_unit.temp", parse_units=False) assert sim_load == sim os.remove("test_sim_save.temp") os.remove("test_sim_save_no_unit.temp")