Skip to content

Commit 1c301d7

Browse files
committed
Nexus: Add tests for file collisions for other supported codes
1 parent 776507b commit 1c301d7

1 file changed

Lines changed: 261 additions & 8 deletions

File tree

nexus/nexus/tests/test_pseudopotential.py

Lines changed: 261 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -652,7 +652,7 @@ def test_read_upf_z_valence(tmp_path):
652652
#end def test_read_upf_z_valence
653653

654654

655-
def test_read_xml_z_valence(tmp_path):
655+
def test_read_qmcpack_xml_z_valence(tmp_path):
656656
xml_file = TEST_FILES["C.BFD.xml"]
657657

658658
z_valence = read_qmcpack_xml_z_valence(xml_file)
@@ -1520,14 +1520,17 @@ def test_pseudoset_from_mixed_dir(tmp_path):
15201520
#end def test_pseudoset_from_mixed_dir
15211521

15221522

1523-
def test_pseudoset_from_mixed_dir_fails(tmp_path):
1523+
def test_pseudoset_from_mixed_dir_rmg_collision(tmp_path):
15241524
pseudo_names = (
15251525
"C.BFD.xml",
15261526
"H.BFD.xml",
15271527
"O.BFD.xml",
15281528
"C.BFD.upf",
15291529
"H.BFD.upf",
15301530
"O.BFD.upf",
1531+
# Throw in some misc files to make sure they get ignored
1532+
"C.tmp",
1533+
"C2.other",
15311534
)
15321535

15331536
psp_dir = tmp_path / "mixed_pseudos"
@@ -1536,11 +1539,6 @@ def test_pseudoset_from_mixed_dir_fails(tmp_path):
15361539

15371540
pseudo_list = []
15381541
for psp in pseudo_names:
1539-
if "POTCAR" in psp:
1540-
potcar_dir = psp_dir / psp.split("/")[0]
1541-
potcar_dir.mkdir()
1542-
assert potcar_dir.exists(), "Failed to create POTCAR directory!"
1543-
15441542
pseudo = (psp_dir / psp).resolve()
15451543
pseudo.touch()
15461544
assert pseudo.exists(), "Failed to create pseudo file!"
@@ -1713,7 +1711,262 @@ def test_pseudoset_from_mixed_dir_fails(tmp_path):
17131711
assert(pyscf_calc.pseudos == pyscf_ref.pseudos)
17141712
assert(pyscf_calc.codes == pyscf_ref.codes)
17151713
assert(pyscf_calc.pseudo_dirs == pyscf_ref.pseudo_dirs)
1716-
#end def test_pseudoset_from_mixed_dir_fails
1714+
#end def test_pseudoset_from_mixed_dir_rmg_collision
1715+
1716+
1717+
def test_pseudoset_from_mixed_dir_espresso_collision(tmp_path):
1718+
pseudo_names = (
1719+
"C.BFD.upf",
1720+
"C1.uspp.UPF",
1721+
"C_4.ncpp",
1722+
)
1723+
1724+
psp_dir = tmp_path / "espresso_collision"
1725+
psp_dir.mkdir()
1726+
assert psp_dir.exists(), "Failed to create pseudo directory!"
1727+
1728+
pseudo_list = []
1729+
for psp in pseudo_names:
1730+
pseudo = (psp_dir / psp).resolve()
1731+
pseudo.touch()
1732+
assert pseudo.exists(), "Failed to create pseudo file!"
1733+
pseudo_list.append(pseudo)
1734+
1735+
with pytest.raises(
1736+
RuntimeError,
1737+
match=(
1738+
"Duplicate element detected for code 'espresso'\n"
1739+
"Either remove 'espresso' from the selected codes, or specify "
1740+
"`filters` and/or `patterns` to ensure the collision does not happen"
1741+
),
1742+
):
1743+
_ = PseudoSet.from_mixed_dir(
1744+
pseudo_dir = psp_dir,
1745+
codes = None, # Default values
1746+
extensions = None, # Default values
1747+
)
1748+
1749+
# Filter by pattern
1750+
_ = PseudoSet.from_mixed_dir(
1751+
pseudo_dir = psp_dir,
1752+
codes = {"espresso"},
1753+
patterns = {"espresso": "BFD"},
1754+
)
1755+
1756+
_ = PseudoSet.from_mixed_dir(
1757+
pseudo_dir = psp_dir,
1758+
codes = {"espresso"},
1759+
patterns = {"espresso": "uspp"},
1760+
)
1761+
1762+
# Filter by extension
1763+
_ = PseudoSet.from_mixed_dir(
1764+
pseudo_dir = psp_dir,
1765+
codes = {"espresso"},
1766+
extensions = {"espresso": ".ncpp"},
1767+
)
1768+
#end def test_pseudoset_from_mixed_dir_espresso_collision
1769+
1770+
1771+
def test_pseudoset_from_mixed_dir_vasp_collision(tmp_path):
1772+
pseudo_names = (
1773+
"C/POTCAR",
1774+
"N/POTCAR",
1775+
"C4-special.vasp",
1776+
)
1777+
1778+
psp_dir = tmp_path / "vasp_collision"
1779+
psp_dir.mkdir()
1780+
assert psp_dir.exists(), "Failed to create pseudo directory!"
1781+
1782+
pseudo_list = []
1783+
for psp in pseudo_names:
1784+
if "POTCAR" in psp:
1785+
potcar_dir = psp_dir / psp.split("/")[0]
1786+
potcar_dir.mkdir()
1787+
assert potcar_dir.exists(), "Failed to create POTCAR directory!"
1788+
1789+
pseudo = (psp_dir / psp).resolve()
1790+
pseudo.touch()
1791+
assert pseudo.exists(), "Failed to create pseudo file!"
1792+
pseudo_list.append(pseudo)
1793+
1794+
with pytest.raises(
1795+
RuntimeError,
1796+
match=(
1797+
"Duplicate element detected for code 'vasp'\n"
1798+
"Either remove 'vasp' from the selected codes, or specify "
1799+
"`filters` and/or `patterns` to ensure the collision does not happen"
1800+
),
1801+
):
1802+
_ = PseudoSet.from_mixed_dir(
1803+
pseudo_dir = psp_dir,
1804+
codes = {"vasp"},
1805+
extensions = None,
1806+
)
1807+
1808+
# Filter by pattern
1809+
_ = PseudoSet.from_mixed_dir(
1810+
pseudo_dir = psp_dir,
1811+
codes = {"vasp"},
1812+
patterns = {"vasp": "special"},
1813+
)
1814+
1815+
# Filter by extension
1816+
_ = PseudoSet.from_mixed_dir(
1817+
pseudo_dir = psp_dir,
1818+
codes = {"vasp"},
1819+
extensions = {"vasp": ".vasp"},
1820+
)
1821+
1822+
_ = PseudoSet.from_mixed_dir(
1823+
pseudo_dir = psp_dir,
1824+
codes = {"vasp"},
1825+
extensions = {"vasp": "POTCAR"},
1826+
)
1827+
1828+
_ = PseudoSet.from_mixed_dir(
1829+
pseudo_dir = psp_dir,
1830+
codes = {"vasp"},
1831+
extensions = {"vasp": "potcar"},
1832+
)
1833+
#end def test_pseudoset_from_mixed_dir_vasp_collision
1834+
1835+
1836+
def test_pseudoset_from_mixed_dir_gamess_collision(tmp_path):
1837+
pseudo_names = (
1838+
"C.gms",
1839+
"C_special.gamess",
1840+
"N.gamess",
1841+
)
1842+
1843+
psp_dir = tmp_path / "gamess_collision"
1844+
psp_dir.mkdir()
1845+
assert psp_dir.exists(), "Failed to create pseudo directory!"
1846+
1847+
pseudo_list = []
1848+
for psp in pseudo_names:
1849+
pseudo = (psp_dir / psp).resolve()
1850+
pseudo.touch()
1851+
assert pseudo.exists(), "Failed to create pseudo file!"
1852+
pseudo_list.append(pseudo)
1853+
1854+
with pytest.raises(
1855+
RuntimeError,
1856+
match=(
1857+
"Duplicate element detected for code 'gamess'\n"
1858+
"Either remove 'gamess' from the selected codes, or specify "
1859+
"`filters` and/or `patterns` to ensure the collision does not happen"
1860+
),
1861+
):
1862+
_ = PseudoSet.from_mixed_dir(
1863+
pseudo_dir = psp_dir,
1864+
codes = None, # Default values
1865+
extensions = None, # Default values
1866+
)
1867+
1868+
with pytest.raises(
1869+
RuntimeError,
1870+
match=(
1871+
"Duplicate element detected for code 'gamess'\n"
1872+
"Either remove 'gamess' from the selected codes, or specify "
1873+
"`filters` and/or `patterns` to ensure the collision does not happen"
1874+
),
1875+
):
1876+
_ = PseudoSet.from_mixed_dir(
1877+
pseudo_dir = psp_dir,
1878+
codes = {"gamess"},
1879+
extensions = None,
1880+
)
1881+
1882+
# Filter by pattern
1883+
_ = PseudoSet.from_mixed_dir(
1884+
pseudo_dir = psp_dir,
1885+
codes = {"gamess"},
1886+
patterns = {"gamess": "special"},
1887+
)
1888+
1889+
# Filter by extension
1890+
_ = PseudoSet.from_mixed_dir(
1891+
pseudo_dir = psp_dir,
1892+
codes = {"gamess"},
1893+
extensions = {"gamess": ".gamess"},
1894+
)
1895+
1896+
_ = PseudoSet.from_mixed_dir(
1897+
pseudo_dir = psp_dir,
1898+
codes = {"gamess"},
1899+
extensions = {"gamess": ".gms"},
1900+
)
1901+
#end def test_pseudoset_from_mixed_dir_gamess_collision
1902+
1903+
1904+
def test_pseudoset_from_mixed_dir_pyscf_collision(tmp_path):
1905+
pseudo_names = (
1906+
"C.nwchem",
1907+
"C_special.gth",
1908+
"N.gth",
1909+
)
1910+
1911+
psp_dir = tmp_path / "pyscf_collision"
1912+
psp_dir.mkdir()
1913+
assert psp_dir.exists(), "Failed to create pseudo directory!"
1914+
1915+
pseudo_list = []
1916+
for psp in pseudo_names:
1917+
pseudo = (psp_dir / psp).resolve()
1918+
pseudo.touch()
1919+
assert pseudo.exists(), "Failed to create pseudo file!"
1920+
pseudo_list.append(pseudo)
1921+
1922+
with pytest.raises(
1923+
RuntimeError,
1924+
match=(
1925+
"Duplicate element detected for code 'pyscf'\n"
1926+
"Either remove 'pyscf' from the selected codes, or specify "
1927+
"`filters` and/or `patterns` to ensure the collision does not happen"
1928+
),
1929+
):
1930+
_ = PseudoSet.from_mixed_dir(
1931+
pseudo_dir = psp_dir,
1932+
codes = None, # Default values
1933+
extensions = None, # Default values
1934+
)
1935+
1936+
with pytest.raises(
1937+
RuntimeError,
1938+
match=(
1939+
"Duplicate element detected for code 'pyscf'\n"
1940+
"Either remove 'pyscf' from the selected codes, or specify "
1941+
"`filters` and/or `patterns` to ensure the collision does not happen"
1942+
),
1943+
):
1944+
_ = PseudoSet.from_mixed_dir(
1945+
pseudo_dir = psp_dir,
1946+
codes = {"pyscf"},
1947+
extensions = None,
1948+
)
1949+
1950+
# Filter by pattern
1951+
_ = PseudoSet.from_mixed_dir(
1952+
pseudo_dir = psp_dir,
1953+
codes = {"pyscf"},
1954+
patterns = {"pyscf": "special"},
1955+
)
1956+
1957+
# Filter by extension
1958+
_ = PseudoSet.from_mixed_dir(
1959+
pseudo_dir = psp_dir,
1960+
codes = {"pyscf"},
1961+
extensions = {"pyscf": ".gth"},
1962+
)
1963+
1964+
_ = PseudoSet.from_mixed_dir(
1965+
pseudo_dir = psp_dir,
1966+
codes = {"pyscf"},
1967+
extensions = {"pyscf": ".nwchem"},
1968+
)
1969+
#end def test_pseudoset_from_mixed_dir_pyscf_collision
17171970

17181971

17191972
def test_pseudoset_from_mixed_dir_mismatches(tmp_path):

0 commit comments

Comments
 (0)