Split an operator (instance of QubitOperator) into sub-operator

QubitOperators, where each sub-operator has terms that are diagonal in the same tensor product basis.

Each sub-operator can be measured using the same qubit post-rotations in expectation estimation. Grouping into these tensor product basis sets has been found to improve the efficiency of expectation estimation significantly for some Hamiltonians in the context of VQE (see section V(A) in the supplementary material of The more general problem of grouping operators into commutitative groups is discussed in section IV (B2) of The original input operator is the union of all output sub-operators, and all sub-operators are disjoint (do not share any terms).

operator (QubitOperator): the operator that will be split into sub-operators (tensor product basis sets). seed (int): default None. Random seed used to initialize the numpy.RandomState pseudo-random number generator.

sub_operators (dict): a dictionary where each key defines a tensor product basis, and each corresponding value is a QubitOperator with terms that are all diagonal in that basis. key (tuple of tuples): Each key is a term, which defines a tensor product basis. A term is a product of individual factors; each factor is represented by a tuple of the form (index, action), and these tuples are collected into a larger tuple which represents the term as the product of its factors. action is from the set {'X', 'Y', 'Z'} and index is a non-negative integer corresponding to the index of a qubit. value (QubitOperator): A QubitOperator with terms that are diagonal in the basis defined by the key it is stored in.

TypeError Operator of invalid type.