def compat(self): import firedrake return compat(firedrake)
import backend from dolfin_adjoint_common import compat from pyadjoint.tape import get_working_tape, stop_annotating from pyadjoint.overloaded_type import OverloadedType, create_overloaded_object, register_overloaded_type from pyadjoint.reduced_functional_numpy import gather from dolfin_adjoint_common.blocks.constant import constant_from_values from fenics_adjoint.blocks import ConstantAssignBlock import numpy compat = compat.compat(backend) @register_overloaded_type class Constant(OverloadedType, backend.Constant): def __init__(self, *args, **kwargs): super(Constant, self).__init__(*args, **kwargs) backend.Constant.__init__(self, *args, **kwargs) def assign(self, *args, **kwargs): annotate_tape = kwargs.pop("annotate_tape", True) if annotate_tape: other = args[0] if not isinstance(other, OverloadedType): other = create_overloaded_object(other) block = ConstantAssignBlock(other) tape = get_working_tape() tape.add_block(block)
class Backend: backend = fenics compat = compat(fenics)