def test_sqrt_out(): var = sc.Variable([Dim.X], values=np.array([4.0, 9.0]), unit=sc.units.m**2) expected = sc.Variable([Dim.X], values=np.array([2.0, 3.0]), unit=sc.units.m) out = sc.sqrt(x=var, out=var) assert var == expected assert out == expected
def _to_spherical(pos, output): output["r"] = sc.sqrt(sc.dot(pos, pos)) output["t"] = sc.acos(pos.fields.z / output["r"].data) signed_phi = sc.atan2(y=pos.fields.y, x=pos.fields.x) abs_phi = sc.abs(signed_phi) output["p-delta"] = ( np.pi * sc.units.rad) - abs_phi # angular delta (magnitude) from pole output['p-sign'] = signed_phi # weighted sign of phi return output
def test_convert_tof_to_energy_transfer_indirect_unphysical(): tof = make_test_data(coords=('tof', 'L1', 'L2'), dataset=True) ef = 25.0 * sc.units.meV tof.coords['final_energy'] = ef t0 = sc.to_unit(tof.coords['L2'] * sc.sqrt(m_n / ef), sc.units.s) coord, is_unphysical = make_unphysical_tof(t0, tof) tof.coords['tof'] = coord result = scn.convert(tof, origin='tof', target='energy_transfer', scatter=True) assert sc.identical(sc.isnan(result.coords['energy_transfer']), is_unphysical)
def test_convert_tof_to_energy_transfer_indirect(): tof = make_test_data(coords=('tof', 'L1', 'L2'), dataset=True) with pytest.raises(RuntimeError): scn.convert(tof, origin='tof', target='energy_transfer', scatter=True) ef = 25.0 * sc.units.meV tof.coords['final_energy'] = ef indirect = scn.convert(tof, origin='tof', target='energy_transfer', scatter=True) check_tof_conversion_metadata(indirect, 'energy_transfer', sc.units.meV) t = tof.coords['tof'] t0 = sc.to_unit(tof.coords['L2'] * sc.sqrt(m_n / 2 / ef), t.unit) assert sc.all(t0 < t).value # only test physical region here ref = sc.to_unit(m_n / 2 * (tof.coords['L1'] / (t - t0))**2, ef.unit).rename_dims({'tof': 'energy_transfer'}) - ef assert sc.allclose(indirect.coords['energy_transfer'], ref, rtol=sc.scalar(1e-13))
def test_correct_temporaries(): v = sc.Variable(dims=['x'], values=np.arange(100.0)) b = sc.sqrt(v)['x', 0:10] assert len(b.values) == 10 b = b['x', 2:5] assert len(b.values) == 3
def test_correct_temporaries(): v = sc.Variable([Dim.X], values=np.arange(100.0)) b = sc.sqrt(v)[Dim.X, 0:10] assert len(b.values) == 10 b = b[Dim.X, 2:5] assert len(b.values) == 3
def test_sqrt(): var = sc.Variable([Dim.X], values=np.array([4.0, 9.0]), unit=sc.units.m**2) expected = sc.Variable([Dim.X], values=np.array([2.0, 3.0]), unit=sc.units.m) assert sc.sqrt(var) == expected