def cache(self): if self._cache is None: cache = K.create_gate_cache(self) qubits = sorted(self.nqubits - q - 1 for q in self.target_qubits) cache.qubits_tensor = qubits + [q + self.nqubits for q in qubits] cache.target_qubits_dm = self.qubits + tuple(q + self.nqubits for q in self.qubits) if K.name != "custom": cache.calculation_cache = K.create_einsum_cache( cache.target_qubits_dm, 2 * self.nqubits) self._cache = cache return self._cache
def cache(self): if self._cache is None: cache = K.create_gate_cache(self) qubits = sorted(self.nqubits - q - 1 for q in self.target_qubits) cache.qubits_tensor = K.cast(qubits + [q + self.nqubits for q in qubits], dtype="int32") cache.target_qubits_dm = self.qubits + tuple(q + self.nqubits for q in self.qubits) if not K.is_custom: cache.calculation_cache = K.create_einsum_cache( cache.target_qubits_dm, 2 * self.nqubits) self._cache = cache return self._cache