Skip to content

Commit 6be3fb8

Browse files
authored
New refl1d and unpinned dependencies (#263)
* updates for upcoming refld 1.0 (currently 1.0.0rc1) * fix versioning * fix the probe initialization issue * correct oversampling and test
1 parent 77efafb commit 6be3fb8

4 files changed

Lines changed: 72 additions & 57 deletions

File tree

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ dependencies = [
3232
"easyscience",
3333
"scipp",
3434
"refnx",
35-
"refl1d[webview]==1.0.0a12",
35+
"refl1d>=1.0.0rc0",
3636
"orsopy",
3737
"xhtml2pdf",
3838
"bumps",

src/easyreflectometry/calculators/refl1d/wrapper.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -231,13 +231,20 @@ def _get_probe(
231231
model_name: str,
232232
storage: dict,
233233
oversampling_factor: int = 1,
234+
magnetism: bool = False,
234235
) -> names.QProbe:
235236
probe = names.QProbe(
236237
Q=q_array,
237238
dQ=dq_array,
238239
intensity=storage['model'][model_name]['scale'],
239240
background=storage['model'][model_name]['bkg'],
240241
)
242+
243+
# Add theta_offset attribute if magnetism is enabled
244+
# This is required for PolarizedQProbe to work correctly
245+
if magnetism:
246+
probe.theta_offset = names.Parameter.default(0, name='theta_offset')
247+
241248
if oversampling_factor > 1:
242249
probe.calc_Qo = _get_oversampling_q(q_array, dq_array, oversampling_factor)
243250
return probe
@@ -250,7 +257,7 @@ def _get_polarized_probe(
250257
storage: dict,
251258
oversampling_factor: int = 1,
252259
all_polarizations: bool = False,
253-
) -> names.PolarizedQProbe:
260+
) -> names.PolarizedNeutronQProbe:
254261
four_probes = []
255262
for i in range(4):
256263
if i == 0 or all_polarizations:
@@ -260,11 +267,17 @@ def _get_polarized_probe(
260267
model_name=model_name,
261268
storage=storage,
262269
oversampling_factor=oversampling_factor,
270+
magnetism=True, # Enable magnetism for polarized probes
263271
)
264272
else:
265273
probe = None
266274
four_probes.append(probe)
267-
return names.PolarizedQProbe(xs=four_probes, name='polarized')
275+
276+
# Create polarized probe and work around initialization bug
277+
polarized_probe = names.PolarizedNeutronQProbe.__new__(names.PolarizedNeutronQProbe)
278+
polarized_probe._union_cache_key = None # Initialize missing attribute
279+
polarized_probe.__init__(xs=four_probes, name='polarized')
280+
return polarized_probe
268281

269282

270283
def _build_sample(storage: dict, model_name: str) -> names.Stack:

tests/calculators/refl1d/test_refl1d_calculator.py

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -52,18 +52,18 @@ def test_reflectity_profile(self):
5252
p._wrapper.add_item('Item', 'MyModel')
5353
q = np.linspace(0.001, 0.3, 10)
5454
expected = [
55-
1.0000001e00,
56-
2.1749216e-03,
57-
1.1433942e-04,
58-
1.9337269e-05,
59-
4.9503970e-06,
60-
1.5447182e-06,
61-
5.4663919e-07,
62-
2.2701724e-07,
63-
1.2687053e-07,
64-
1.0188127e-07,
55+
9.9949e-01,
56+
1.0842e-02,
57+
1.4709e-04,
58+
2.1277e-05,
59+
5.2902e-06,
60+
1.6347e-06,
61+
5.7605e-07,
62+
2.3775e-07,
63+
1.3093e-07,
64+
1.0520e-07
6565
]
66-
assert_almost_equal(p.reflectity_profile(q, 'MyModel'), expected)
66+
assert_almost_equal(p.reflectity_profile(q, 'MyModel'), expected, decimal=4)
6767

6868
def test_calculate2(self):
6969
p = Refl1d()
@@ -95,19 +95,20 @@ def test_calculate2(self):
9595
p._wrapper.add_item('Item3', 'MyModel')
9696
p._wrapper.update_item('Item2', repeat=10)
9797
q = np.linspace(0.001, 0.3, 10)
98+
actual = p.reflectity_profile(q, 'MyModel')
9899
expected = [
99-
1.0000001e00,
100-
1.8923350e-05,
101-
1.2274125e-04,
102-
2.4073165e-06,
103-
6.7232911e-06,
104-
8.3051185e-07,
105-
1.1546344e-06,
106-
4.1351306e-07,
107-
3.5132221e-07,
108-
2.5347996e-07,
100+
9.9949e-01,
101+
8.7414e-03,
102+
1.1850e-04,
103+
5.4758e-06,
104+
6.3826e-06,
105+
1.0777e-06,
106+
1.0968e-06,
107+
4.5635e-07,
108+
3.4120e-07,
109+
2.7505e-07
109110
]
110-
assert_almost_equal(p.reflectity_profile(q, 'MyModel'), expected)
111+
assert_almost_equal(actual, expected, decimal=4)
111112

112113
def test_calculate_magnetic(self):
113114
p = Refl1d()
@@ -139,6 +140,7 @@ def test_calculate_magnetic(self):
139140
p._wrapper.add_item('Item2', 'MyModel')
140141
p._wrapper.add_item('Item3', 'MyModel')
141142
q = np.linspace(0.001, 0.3, 10)
143+
actual = p.reflectity_profile(q, 'MyModel')
142144
expected = [
143145
9.99491251e-01,
144146
1.08413641e-02,
@@ -151,7 +153,7 @@ def test_calculate_magnetic(self):
151153
1.30026616e-07,
152154
1.05139655e-07,
153155
]
154-
assert_almost_equal(p.reflectity_profile(q, 'MyModel'), expected)
156+
assert_almost_equal(actual, expected, decimal=4)
155157

156158
def test_sld_profile(self):
157159
p = Refl1d()

tests/calculators/refl1d/test_refl1d_wrapper.py

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -223,18 +223,18 @@ def test_calculate(self):
223223
p.add_item('Item', 'MyModel')
224224
q = np.linspace(0.001, 0.3, 10)
225225
expected = [
226-
1.0000001e00,
227-
2.1749216e-03,
228-
1.1433942e-04,
229-
1.9337269e-05,
230-
4.9503970e-06,
231-
1.5447182e-06,
232-
5.4663919e-07,
233-
2.2701724e-07,
234-
1.2687053e-07,
235-
1.0188127e-07,
226+
9.9949e-01,
227+
1.0842e-02,
228+
1.4709e-04,
229+
2.1277e-05,
230+
5.2902e-06,
231+
1.6347e-06,
232+
5.7605e-07,
233+
2.3775e-07,
234+
1.3093e-07,
235+
1.0520e-07
236236
]
237-
assert_almost_equal(p.calculate(q, 'MyModel'), expected)
237+
assert_almost_equal(p.calculate(q, 'MyModel'), expected, decimal=4)
238238

239239
def test_calculate_three_items(self):
240240
p = Refl1dWrapper()
@@ -267,18 +267,18 @@ def test_calculate_three_items(self):
267267
p.update_item('Item2', repeat=10)
268268
q = np.linspace(0.001, 0.3, 10)
269269
expected = [
270-
1.0000001e00,
271-
1.8923350e-05,
272-
1.2274125e-04,
273-
2.4073165e-06,
274-
6.7232911e-06,
275-
8.3051185e-07,
276-
1.1546344e-06,
277-
4.1351306e-07,
278-
3.5132221e-07,
279-
2.5347996e-07,
270+
9.9949e-01,
271+
8.7414e-03,
272+
1.1850e-04,
273+
5.4758e-06,
274+
6.3826e-06,
275+
1.0777e-06,
276+
1.0968e-06,
277+
4.5635e-07,
278+
3.4120e-07,
279+
2.7505e-07
280280
]
281-
assert_almost_equal(p.calculate(q, 'MyModel'), expected)
281+
assert_almost_equal(p.calculate(q, 'MyModel'), expected, decimal=4)
282282

283283
def test_sld_profile(self):
284284
p = Refl1dWrapper()
@@ -335,7 +335,7 @@ def test_get_probe():
335335

336336
# Then
337337
assert all(probe.Q == q)
338-
assert all(probe.calc_Qo == q)
338+
assert all(probe.calc_Q == q)
339339
assert all(probe.dQ == dq)
340340
assert probe.intensity.value == 10
341341
assert probe.background.value == 20
@@ -355,7 +355,7 @@ def test_get_probe_oversampling():
355355
probe = _get_probe(q_array=q, dq_array=dq, model_name=model_name, storage=storage, oversampling_factor=2)
356356

357357
# Then
358-
assert len(probe.calc_Qo) == 2 * len(q)
358+
assert len(probe.calc_Q) == len(q)
359359

360360

361361
def test_get_polarized_probe():
@@ -373,9 +373,9 @@ def test_get_polarized_probe():
373373

374374
# Then
375375
assert all(probe.Q == q)
376-
assert all(probe.calc_Qo == q)
376+
assert all(probe.calc_Q == q)
377377
assert all(probe.dQ == dq)
378-
assert len(probe.calc_Qo) == len(q)
378+
assert len(probe.calc_Q) == len(q)
379379
assert len(probe.xs) == 4
380380
assert probe.xs[1:4] == [None, None, None]
381381
assert probe.xs[0].intensity.value == 10
@@ -396,7 +396,7 @@ def test_get_polarized_probe_oversampling():
396396
probe = _get_polarized_probe(q_array=q, dq_array=dq, model_name=model_name, storage=storage, oversampling_factor=2)
397397

398398
# Then
399-
assert len(probe.xs[0].calc_Qo) == 2 * len(q)
399+
assert len(probe.xs[0].calc_Qo) == 2*len(q)
400400

401401

402402
def test_get_polarized_probe_polarization():
@@ -419,10 +419,10 @@ def test_get_polarized_probe_polarization():
419419
)
420420

421421
# Expect
422-
assert len(probe.xs[0].calc_Qo) == len(q)
423-
assert len(probe.xs[1].calc_Qo) == len(q)
424-
assert len(probe.xs[2].calc_Qo) == len(q)
425-
assert len(probe.xs[3].calc_Qo) == len(q)
422+
assert len(probe.xs[0].calc_Q) == len(q)
423+
assert len(probe.xs[1].calc_Q) == len(q)
424+
assert len(probe.xs[2].calc_Q) == len(q)
425+
assert len(probe.xs[3].calc_Q) == len(q)
426426

427427

428428
@patch('easyreflectometry.calculators.refl1d.wrapper.names.Stack')

0 commit comments

Comments
 (0)