def diagonalupdate(self, d: VariableData): return type(self)({ k: self.operators[k].diagonalupdate(d[k]) for k in self.operators.keys() & d.keys() })
def blocks(self) -> VariableData: return VariableData( {v: op.to_dense() for v, op in self.operators.items()})
def diagonal(self): return VariableData( {v: op.diagonal() for v, op in self.operators.items()})
def from_diagonal(cls, diag: VariableData) -> "VariableFullOperator": operators = {v: DiagonalMatrix(d) for v, d in diag.items()} return cls(operators)
def diagonal(self): diag = VariableData() for op in self.operators: diag.update(op.diagonal()) return diag
def fixed_values(self) -> VariableData: return VariableData()