@@ -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
17191972def test_pseudoset_from_mixed_dir_mismatches (tmp_path ):
0 commit comments