77
88import os
99import unittest
10+ from unittest .mock import patch
1011
1112from arkane .modelchem import LevelOfTheory
1213
@@ -45,7 +46,7 @@ def test_deduce_software(self):
4546 self .assertEqual (Level (method = 'B3LYP' , basis = '6-311g+(d,f)' ).software , 'gaussian' )
4647 level_3 = Level (method = 'B3LYP' , basis = '6-311g+(d,f)' )
4748 level_3 .deduce_software (job_type = 'irc' )
48- self .assertEqual (level_3 .software , 'qchem ' )
49+ self .assertEqual (level_3 .software , 'gaussian ' )
4950 self .assertEqual (Level (method = 'DLPNO-CCSD(T)' , basis = 'def2-tzvp' ).software , 'orca' )
5051 self .assertEqual (Level (method = 'PM6' ).software , 'gaussian' )
5152 self .assertEqual (Level (method = 'HF' ).software , 'gaussian' )
@@ -61,6 +62,36 @@ def test_deduce_software(self):
6162 self .assertEqual (Level (method = 'new' , basis = 'new' , args = {'keywords' : {'general' : 'iop(99/33=1)' }}).software ,
6263 'gaussian' )
6364
65+ @patch ('arc.level.supported_ess' , new = ['qchem' , 'gaussian' ])
66+ def test_deduce_software_irc_with_both (self ):
67+ """Test deducing software for IRC job when both qchem and gaussian are supported."""
68+ level = Level (method = 'B3LYP' , basis = '6-311g+(d,f)' )
69+ level .deduce_software (job_type = 'irc' )
70+ self .assertEqual (level .software , 'gaussian' ) # gaussian is also available
71+
72+ @patch ('arc.level.supported_ess' , new = ['qchem' ])
73+ def test_deduce_software_irc_with_only_gaussian (self ):
74+ """Test deducing software for IRC job when only gaussian is supported."""
75+ level = Level (method = 'B3LYP' , basis = '6-311g+(d,f)' )
76+ level .deduce_software (job_type = 'irc' )
77+ self .assertEqual (level .software , 'qchem' ) # Only qchem is available
78+
79+ @patch ('arc.level.supported_ess' , new = [])
80+ def test_deduce_software_value_errors (self ):
81+ """Test various ValueError scenarios in deduce_software."""
82+ test_cases = [
83+ ('onedmin' , None , 'onedmin' ),
84+ ('orbitals' , None , 'qchem' ),
85+ ('composite' , 'B3LYP' , 'gaussian' ),
86+ ('irc' , None , 'qchem or gaussian' )
87+ ]
88+
89+ for job_type , method , missing_software in test_cases :
90+ with self .subTest (job_type = job_type , method = method , missing_software = missing_software ):
91+ level = Level (method = method or 'B3LYP' , basis = '6-311g+(d,f)' if not method else None )
92+ with self .assertRaises (ValueError ):
93+ level .deduce_software (job_type = job_type )
94+
6495 def test_lower (self ):
6596 """Test the Level.lower() method"""
6697 level = Level (method = 'B3LYP' ,
0 commit comments