def _set_quantum_instance( self, quantum_instance: Optional[Union[QuantumInstance, Backend]]) -> None: """ Internal method to set a quantum instance and compute/initialize a sampler. Args: quantum_instance: A quantum instance to set. Returns: None. """ if isinstance(quantum_instance, Backend): quantum_instance = QuantumInstance(quantum_instance) self._quantum_instance = quantum_instance if quantum_instance is not None: self._circuit_sampler = CircuitSampler( self._quantum_instance, param_qobj=is_aer_provider(self._quantum_instance.backend), caching="all", ) else: self._circuit_sampler = None
def quantum_instance(self, quantum_instance: Union[QuantumInstance, BaseBackend, Backend]) -> None: """ set quantum_instance """ super(VQE, self.__class__).quantum_instance.__set__(self, quantum_instance) self._circuit_sampler = CircuitSampler( self._quantum_instance, param_qobj=is_aer_provider(self._quantum_instance.backend))
def quantum_instance( self, quantum_instance: Union[QuantumInstance, BaseBackend, Backend]) -> None: """set quantum_instance""" if not isinstance(quantum_instance, QuantumInstance): quantum_instance = QuantumInstance(quantum_instance) self._quantum_instance = quantum_instance self._circuit_sampler = CircuitSampler(quantum_instance, param_qobj=is_aer_provider( quantum_instance.backend))
def quantum_instance(self, quantum_instance: Union[QuantumInstance, BaseBackend, Backend]) -> None: """ set quantum_instance """ super(VQE, self.__class__).quantum_instance.__set__(self, quantum_instance) self._circuit_sampler = CircuitSampler( self._quantum_instance, param_qobj=is_aer_provider(self._quantum_instance.backend)) # Expectation was not passed by user, try to create one if not self._user_valid_expectation: self._try_set_expectation_value_from_factory()
def __init__(self, operator: OperatorBase, input_params: Optional[List[Parameter]] = None, weight_params: Optional[List[Parameter]] = None, exp_val: Optional[ExpectationBase] = None, gradient: Optional[Gradient] = None, quantum_instance: Optional[Union[QuantumInstance, BaseBackend, Backend]] = None): """Initializes the Opflow Quantum Neural Network. Args: operator: The parametrized operator that represents the neural network. input_params: The operator parameters that correspond to the input of the network. weight_params: The operator parameters that correspond to the trainable weights. exp_val: The Expected Value converter to be used for the operator. gradient: The Gradient converter to be used for the operator's backward pass. quantum_instance: The quantum instance to evaluate the network. """ self._input_params = list(input_params) or [] self._weight_params = list(weight_params) or [] if isinstance(quantum_instance, (BaseBackend, Backend)): quantum_instance = QuantumInstance(quantum_instance) if quantum_instance: self._quantum_instance = quantum_instance self._circuit_sampler = CircuitSampler( self._quantum_instance, param_qobj=is_aer_provider(self._quantum_instance.backend), caching="all") else: self._quantum_instance = None self._circuit_sampler = None self._operator = operator self._forward_operator = exp_val.convert( operator) if exp_val else operator self._gradient_operator: OperatorBase = None try: gradient = gradient or Gradient() self._gradient_operator = gradient.convert( operator, self._input_params + self._weight_params) except (ValueError, TypeError, OpflowError, QiskitError): logger.warning( 'Cannot compute gradient operator! Continuing without gradients!' ) output_shape = self._get_output_shape_from_op(operator) super().__init__(len(self._input_params), len(self._weight_params), sparse=False, output_shape=output_shape)
def _check_quantum_instance_and_modes_consistent(self) -> None: """ Checks whether the statevector and param_qobj settings are compatible with the backend Raises: ValueError: statevector or param_qobj are True when not supported by backend. """ if self._statevector and not is_statevector_backend(self.quantum_instance.backend): raise ValueError('Statevector mode for circuit sampling requires statevector ' 'backend, not {}.'.format(self.quantum_instance.backend)) if self._param_qobj and not is_aer_provider(self.quantum_instance.backend): raise ValueError('Parameterized Qobj mode requires Aer ' 'backend, not {}.'.format(self.quantum_instance.backend))
def __init__(self, operator: OperatorBase, input_params: Optional[List[Parameter]] = None, weight_params: Optional[List[Parameter]] = None, exp_val: Optional[ExpectationBase] = None, gradient: Optional[Gradient] = None, quantum_instance: Optional[Union[QuantumInstance, BaseBackend, Backend]] = None): """Initializes the Opflow Quantum Neural Network. Args: operator: The parametrized operator that represents the neural network. input_params: The operator parameters that correspond to the input of the network. weight_params: The operator parameters that correspond to the trainable weights. exp_val: The Expected Value converter to be used for the operator. gradient: The Gradient converter to be used for the operator's backward pass. quantum_instance: The quantum instance to evaluate the network. """ self.operator = operator self.input_params = list(input_params or []) self.weight_params = list(weight_params or []) self.exp_val = exp_val # TODO: currently not used by Gradient! self.gradient = gradient or Gradient() if isinstance(quantum_instance, (BaseBackend, Backend)): quantum_instance = QuantumInstance(quantum_instance) if quantum_instance: self.quantum_instance = quantum_instance self.circuit_sampler = CircuitSampler( self.quantum_instance, param_qobj=is_aer_provider(self.quantum_instance.backend) ) # TODO: replace by extended caching in circuit sampler after merged: "caching='all'" self.gradient_sampler = deepcopy(self.circuit_sampler) else: self.quantum_instance = None self.circuit_sampler = None self.gradient_sampler = None self.forward_operator = self.exp_val.convert(operator) if exp_val else operator self.gradient_operator = self.gradient.convert(operator, self.input_params + self.weight_params) output_shape = self._get_output_shape_from_op(operator) super().__init__(len(self.input_params), len(self.weight_params), sparse=False, output_shape=output_shape)