Thanks to visit codestin.com
Credit goes to github.com

Skip to content

[local state-averaging] H1EZipFCISolver member functions #77

@MatthewRHermes

Description

@MatthewRHermes

To enable local state-averaging, the H1EZipFCISolver member functions must be further generalized. Currently, in the dev branch, the *_make_rdm* functions will do local state-averaging correctly thanks to this hacky function:

# This is a hack designed to, i.e., set
# self.fcisolvers[i].nroots = 1 for all i
# in the context of StateAverageMixFCISolver._loop_civecs, so that local state-averaging
# in the ith Hilbert space can be totally abstracted away from the HIEZipFCISolver,
# StateAverageNMixFCISolver layer
def _loop_civecs (self, *args, **kwargs):
_solver_args = self._solver_args
_state_args = self._state_args
for i, solver in enumerate (self.fcisolvers):
my_args = []
for arg in args:
if isinstance (arg, (_state_args, _solver_args)):
my_args.append (arg[i])
else:
my_args.append (arg)
my_kwargs = {}
for key, item in kwargs.items ():
if isinstance (arg, (_state_args, _solver_args)):
my_kwargs[key] = item[i]
else:
my_kwargs[key] = item
yield solver, my_args, my_kwargs

But kernel, approx_kernel, and the other states_ functions, which use _loop_solver rather than _loop_civecs, generally do not work with local state-averaging.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions