def gradient_write(wfn: core.Wavefunction): if core.get_option('FINDIF', 'GRADIENT_WRITE'): filename = core.get_writer_file_prefix(wfn.molecule().name()) + ".grad" qcdb.gradparse.to_string(np.asarray(wfn.gradient()), filename, dtype='GRD', mol=wfn.molecule(), energy=wfn.energy())
def _core_wavefunction_to_file(wfn: core.Wavefunction, filename: str = None) -> Dict: """Converts a Wavefunction object to a base class Parameters ---------- wfn A Wavefunction or inherited class filename An optional filename to write the data to Returns ------- dict A dictionary and NumPy representation of the Wavefunction. """ # collect the wavefunction's variables in a dictionary indexed by varaible type # some of the data types have to be made numpy-friendly first if wfn.basisset().name().startswith("anonymous"): raise ValidationError( "Cannot serialize wavefunction with custom basissets.") wfn_data = { 'molecule': wfn.molecule().to_dict(), 'matrix': { 'Ca': wfn.Ca().to_array() if wfn.Ca() else None, 'Cb': wfn.Cb().to_array() if wfn.Cb() else None, 'Da': wfn.Da().to_array() if wfn.Da() else None, 'Db': wfn.Db().to_array() if wfn.Db() else None, 'Fa': wfn.Fa().to_array() if wfn.Fa() else None, 'Fb': wfn.Fb().to_array() if wfn.Fb() else None, 'H': wfn.H().to_array() if wfn.H() else None, 'S': wfn.S().to_array() if wfn.S() else None, 'X': wfn.lagrangian().to_array() if wfn.lagrangian() else None, 'aotoso': wfn.aotoso().to_array() if wfn.aotoso() else None, 'gradient': wfn.gradient().to_array() if wfn.gradient() else None, 'hessian': wfn.hessian().to_array() if wfn.hessian() else None }, 'vector': { 'epsilon_a': wfn.epsilon_a().to_array() if wfn.epsilon_a() else None, 'epsilon_b': wfn.epsilon_b().to_array() if wfn.epsilon_b() else None, 'frequencies': wfn.frequencies().to_array() if wfn.frequencies() else None }, 'dimension': { 'doccpi': wfn.doccpi().to_tuple(), 'frzcpi': wfn.frzcpi().to_tuple(), 'frzvpi': wfn.frzvpi().to_tuple(), 'nalphapi': wfn.nalphapi().to_tuple(), 'nbetapi': wfn.nbetapi().to_tuple(), 'nmopi': wfn.nmopi().to_tuple(), 'nsopi': wfn.nsopi().to_tuple(), 'soccpi': wfn.soccpi().to_tuple() }, 'int': { 'nalpha': wfn.nalpha(), 'nbeta': wfn.nbeta(), 'nfrzc': wfn.nfrzc(), 'nirrep': wfn.nirrep(), 'nmo': wfn.nmo(), 'nso': wfn.nso(), 'print': wfn.get_print(), }, 'string': { 'name': wfn.name(), 'module': wfn.module(), 'basisname': wfn.basisset().name() }, 'boolean': { 'PCM_enabled': wfn.PCM_enabled(), 'same_a_b_dens': wfn.same_a_b_dens(), 'same_a_b_orbs': wfn.same_a_b_orbs(), 'density_fitted': wfn.density_fitted(), 'basispuream': wfn.basisset().has_puream() }, 'float': { 'energy': wfn.energy(), 'efzc': wfn.efzc(), 'dipole_field_x': wfn.get_dipole_field_strength()[0], 'dipole_field_y': wfn.get_dipole_field_strength()[1], 'dipole_field_z': wfn.get_dipole_field_strength()[2] }, 'floatvar': wfn.scalar_variables(), 'matrixarr': {k: v.to_array() for k, v in wfn.array_variables().items()} } # yapf: disable if filename is not None: if not filename.endswith('.npy'): filename += '.npy' np.save(filename, wfn_data, allow_pickle=True) return wfn_data