def _helper_float(f_content: TextIO) -> dict: """Compute the float type values.""" float_label = { 'charge': ['<Net Charge>', '</Net Charge>'], 'energy': ['<Energy = T + Vne + Vee + Vnn>', '</Energy = T + Vne + Vee + Vnn>'], 'virial_ratio': ['<Virial Ratio (-V/T)>', '</Virial Ratio (-V/T)>'], 'nuclear_viral': [ '<Nuclear Virial of Energy-Gradient-Based ' 'Forces on Nuclei, W>', '</Nuclear Virial of Energy-Gradient-Based ' 'Forces on Nuclei, W>' ], 'full_virial_ratio': [ '<Full Virial Ratio, -(V - W)/T>', '</Full Virial Ratio, -(V - W)/T>' ] } dict_float = {} for key, val in float_label.items(): if f_content.find(val[0]) > 0: float_info = f_content[f_content.find(val[0]) + len(val[0]) + 1:f_content.find(val[1])] dict_float[key] = np.array(float_info, dtype=float) # case for when string not find in the file elif f_content.find(val[0]) == -1: dict_float[key] = np.array(None) return dict_float
def _helper_mo(f_content: TextIO, num_primitives: int) \ -> Tuple[List, np.ndarray]: str_idx1 = f_content.find('<Molecular Orbital Primitive Coefficients>') str_idx2 = f_content.find('</Molecular Orbital Primitive Coefficients>') mo = f_content[str_idx1 + 1 + len('<Molecular Orbital Primitive ' 'Coefficients>'):str_idx2] mo_count = [ int(i) for i in re.findall(r'<MO Number>\n(.*?)\n</MO Number>', mo, re.S) ] # raw-primitive expansion coefficients for MO coefficient_all = re.findall(r'[-+]?\d+.\d+[E,e][+-]\d+', mo, flags=re.MULTILINE) mo_coefficients = np.array(coefficient_all, dtype=np.float).reshape(-1, num_primitives) mo_coefficients = np.transpose(mo_coefficients) return np.array(mo_count, np.int), mo_coefficients