From 59a472fb49de15f0acfe45024de956664276aaff Mon Sep 17 00:00:00 2001 From: Caden Myers Date: Tue, 13 Oct 2026 15:08:07 -0400 Subject: [PATCH 1/2] fix: replace deprecated setScatteringFactorTableByType in BasePDFGenerator diffpy.srreal deprecates setScatteringFactorTableByType in favor of assigning the scatteringfactortable property, which accepts the same type strings. Add tests for setScatteringType covering X, N, E, a registered long name and an unknown type. Closes #137 Co-Authored-By: Claude Opus 5.5 --- news/replace-sft-by-type.rst | 23 +++++++++++ src/diffpy/srfit/pdf/basepdfgenerator.py | 2 +- tests/test_pdfgenerator.py | 52 +++++++++++++++++++++++- 3 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 news/replace-sft-by-type.rst diff --git a/news/replace-sft-by-type.rst b/news/replace-sft-by-type.rst new file mode 100644 index 00000000..5a195e47 --- /dev/null +++ b/news/replace-sft-by-type.rst @@ -0,0 +1,23 @@ +**Added:** + +* + +**Changed:** + +* + +**Deprecated:** + +* + +**Removed:** + +* + +**Fixed:** + +* Set the scattering factor table through the ``scatteringfactortable`` property in ``setScatteringType`` instead of the ``setScatteringFactorTableByType`` method deprecated in diffpy.srreal. + +**Security:** + +* diff --git a/src/diffpy/srfit/pdf/basepdfgenerator.py b/src/diffpy/srfit/pdf/basepdfgenerator.py index 6d546da8..d66f33f6 100644 --- a/src/diffpy/srfit/pdf/basepdfgenerator.py +++ b/src/diffpy/srfit/pdf/basepdfgenerator.py @@ -198,7 +198,7 @@ def setScatteringType(self, stype="X"): ValueError If stype is not a recognized scattering type. """ - self._calc.setScatteringFactorTableByType(stype) + self._calc.scatteringfactortable = stype # update the meta dictionary only if there was no exception self.meta["stype"] = self.getScatteringType() return diff --git a/tests/test_pdfgenerator.py b/tests/test_pdfgenerator.py index 4d915928..033c338e 100644 --- a/tests/test_pdfgenerator.py +++ b/tests/test_pdfgenerator.py @@ -68,7 +68,7 @@ def testGenerator(diffpy_srreal_available, datafile): calc.rmin = r[0] calc.rmax = r[-1] + 0.5 * calc.rstep calc.qmax = qmax - calc.setScatteringFactorTableByType("N") + calc.scatteringfactortable = "N" calc.eval(stru) yref = calc.pdf @@ -90,3 +90,53 @@ def test_setQmin(diffpy_srreal_available): assert 0.93 == gen.getQmin() assert 0.93 == gen._calc.qmin return + + +@pytest.mark.parametrize( + "input_stype, expected_scattering_type", + [ + # Test that the scattering type sets the calculator's scattering + # factor table. + # C1: X-ray scattering type given as a short code. + # Expected: The X-ray table is used and "X" is reported. + ("X", "X"), + # C2: Neutron scattering type given as a short code. + # Expected: The neutron table is used and "N" is reported. + ("N", "N"), + # C3: Electron scattering type given as a short code. + # Expected: The electron table is used and "E" is reported. + ("E", "E"), + # C4: Neutron scattering type given as its registered name. + # Expected: The neutron table is used and "N" is reported. + ("neutron", "N"), + ], +) +def test_set_scattering_type( + diffpy_srreal_available, input_stype, expected_scattering_type +): + if not diffpy_srreal_available: + pytest.skip("diffpy.srreal package not available") + generator = PDFGenerator() + generator.setScatteringType(input_stype) + actual_scattering_type = generator.getScatteringType() + actual_table_type = generator._calc.scatteringfactortable.radiationType() + actual_meta_stype = generator.meta["stype"] + assert actual_scattering_type == expected_scattering_type + assert actual_table_type == expected_scattering_type + assert actual_meta_stype == expected_scattering_type + + +def test_set_scattering_type_bad(diffpy_srreal_available): + # C1: Unknown scattering type. + # Expected: ValueError is raised and the previous scattering type is + # kept. + if not diffpy_srreal_available: + pytest.skip("diffpy.srreal package not available") + generator = PDFGenerator() + generator.setScatteringType("N") + with pytest.raises(ValueError, match="Unknown type 'bogus'"): + generator.setScatteringType("bogus") + actual_scattering_type = generator.getScatteringType() + actual_meta_stype = generator.meta["stype"] + assert actual_scattering_type == "N" + assert actual_meta_stype == "N" From 4572e858a6067f710edbc4d639866a8293c44f68 Mon Sep 17 00:00:00 2001 From: Caden Myers Date: Tue, 13 Oct 2026 15:43:35 -0400 Subject: [PATCH 2/2] test: remove the setScatteringType tests Keep only the update of the reference calculation in testGenerator. Co-Authored-By: Claude Opus 5.5 --- tests/test_pdfgenerator.py | 50 -------------------------------------- 1 file changed, 50 deletions(-) diff --git a/tests/test_pdfgenerator.py b/tests/test_pdfgenerator.py index 033c338e..b1bd8ad7 100644 --- a/tests/test_pdfgenerator.py +++ b/tests/test_pdfgenerator.py @@ -90,53 +90,3 @@ def test_setQmin(diffpy_srreal_available): assert 0.93 == gen.getQmin() assert 0.93 == gen._calc.qmin return - - -@pytest.mark.parametrize( - "input_stype, expected_scattering_type", - [ - # Test that the scattering type sets the calculator's scattering - # factor table. - # C1: X-ray scattering type given as a short code. - # Expected: The X-ray table is used and "X" is reported. - ("X", "X"), - # C2: Neutron scattering type given as a short code. - # Expected: The neutron table is used and "N" is reported. - ("N", "N"), - # C3: Electron scattering type given as a short code. - # Expected: The electron table is used and "E" is reported. - ("E", "E"), - # C4: Neutron scattering type given as its registered name. - # Expected: The neutron table is used and "N" is reported. - ("neutron", "N"), - ], -) -def test_set_scattering_type( - diffpy_srreal_available, input_stype, expected_scattering_type -): - if not diffpy_srreal_available: - pytest.skip("diffpy.srreal package not available") - generator = PDFGenerator() - generator.setScatteringType(input_stype) - actual_scattering_type = generator.getScatteringType() - actual_table_type = generator._calc.scatteringfactortable.radiationType() - actual_meta_stype = generator.meta["stype"] - assert actual_scattering_type == expected_scattering_type - assert actual_table_type == expected_scattering_type - assert actual_meta_stype == expected_scattering_type - - -def test_set_scattering_type_bad(diffpy_srreal_available): - # C1: Unknown scattering type. - # Expected: ValueError is raised and the previous scattering type is - # kept. - if not diffpy_srreal_available: - pytest.skip("diffpy.srreal package not available") - generator = PDFGenerator() - generator.setScatteringType("N") - with pytest.raises(ValueError, match="Unknown type 'bogus'"): - generator.setScatteringType("bogus") - actual_scattering_type = generator.getScatteringType() - actual_meta_stype = generator.meta["stype"] - assert actual_scattering_type == "N" - assert actual_meta_stype == "N"