def cache(self): if self._cache is None: cache = K.create_gate_cache(self) target_qubits = set(self.target_qubits) unmeasured_qubits = [] reduced_target_qubits = dict() for i in range(self.nqubits): if i in target_qubits: reduced_target_qubits[i] = i - len(unmeasured_qubits) else: unmeasured_qubits.append(i) cache.unmeasured_qubits = tuple(unmeasured_qubits) cache.reduced_target_qubits = list( reduced_target_qubits[i] for i in self.target_qubits) if K.name != "custom": sorted_qubits = sorted(self.target_qubits) cache.order = list(sorted_qubits) s = 1 + self.density_matrix cache.tensor_shape = K.cast(s * self.nqubits * (2,), dtype='DTYPEINT') cache.flat_shape = K.cast(s * (2 ** self.nqubits,), dtype='DTYPEINT') if self.density_matrix: cache.order.extend((q + self.nqubits for q in sorted_qubits)) cache.order.extend((q for q in range(self.nqubits) if q not in sorted_qubits)) cache.order.extend((q + self.nqubits for q in range(self.nqubits) if q not in sorted_qubits)) else: cache.order.extend((q for q in range(self.nqubits) if q not in sorted_qubits)) 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 = 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
def cache(self): if self._cache is None: self._cache = K.create_gate_cache(self) return self._cache