class_docstr: Create an exponential operator that defines a generator, of the form :math:`e^{-ix\hat{G}}`
  
  Args:
      base (~.operation.Operator): The operator to be used as a generator, G.
      param (float): The evolution parameter, x. This parameter is expected not to have
          any complex component.
      num_steps (int): The number of steps used in the decomposition of the exponential operator,
          also known as the Trotter number. If this value is `None` and the Suzuki-Trotter
          decomposition is needed, an error will be raised.
      id (str): id for the Evolution operator. Default is None.
  
  Returns:
     :class:`Evolution`: A :class:`~.operation.Operator` representing an operator exponential of the form :math:`e^{-ix\hat{G}}`,
     where x is real.
  
  **Usage Details**
  
  In contrast to the general :class:`~.Exp` class, the ``Evolution`` operator :math:`e^{-ix\hat{G}}` is constrained to have a single trainable
  parameter, x. Any parameters contained in the base operator are not trainable. This allows the operator
  to be differentiated with regard to the evolution parameter. Defining a mathematically identical operator
  using the :class:`~.Exp` class will be incompatible with a variety of PennyLane functions that require only a single
  trainable parameter.
  
  **Example**
  This symbolic operator can be used to make general rotation operators:
  
  >>> theta = np.array(1.23)
  >>> op = Evolution(qml.PauliX(0), 0.5 * theta)
  >>> qml.math.allclose(op.matrix(), qml.RX(theta, wires=0).matrix())
  True
  
  Or to define a time evolution operator for a time-independent Hamiltonian:
  
  >>> H = qml.Hamiltonian([1, 1], [qml.PauliY(0), qml.PauliX(1)])
  >>> t = 10e-6
  >>> U = Evolution(H, t)
  
  If the base operator is Hermitian, then the gate can be used in a circuit,
  though it may not be supported by the device and may not be differentiable.
  
  >>> @qml.qnode(qml.device('default.qubit', wires=1))
  ... def circuit(x):
  ...     qml.ops.Evolution(qml.PauliX(0), 0.5 * x)
  ...     return qml.expval(qml.PauliZ(0))
  >>> print(qml.draw(circuit)(1.23))
  0: ──Exp(-0.61j X)─┤  <Z>
class_docstr_tok: ["Create","an","exponential","operator","that","defines","a","generator",",","of","the","form",":","math",":","`","e^","{","-ix\\hat","{","G","}","}","`","Args",":","base","(","~.operation.Operator",")",":","The","operator","to","be","used","as","a","generator",",","G.","param","(","float",")",":","The","evolution","parameter",",","x",".","This","parameter","is","expected","not","to","have","any","complex","component",".","num_steps","(","int",")",":","The","number","of","steps","used","in","the","decomposition","of","the","exponential","operator",",","also","known","as","the","Trotter","number",".","If","this","value","is","`","None","`","and","the","Suzuki-Trotter","decomposition","is","needed",",","an","error","will","be","raised",".","id","(","str",")",":","id","for","the","Evolution","operator",".","Default","is","None",".","Returns",":",":","class",":","`","Evolution","`",":","A",":","class",":","`","~.operation.Operator","`","representing","an","operator","exponential","of","the","form",":","math",":","`","e^","{","-ix\\hat","{","G","}","}","`",",","where","x","is","real",".","*","*","Usage","Details","*","*","In","contrast","to","the","general",":","class",":","`","~.Exp","`","class",",","the","``","Evolution","``","operator",":","math",":","`","e^","{","-ix\\hat","{","G","}","}","`","is","constrained","to","have","a","single","trainable","parameter",",","x",".","Any","parameters","contained","in","the","base","operator","are","not","trainable",".","This","allows","the","operator","to","be","differentiated","with","regard","to","the","evolution","parameter",".","Defining","a","mathematically","identical","operator","using","the",":","class",":","`","~.Exp","`","class","will","be","incompatible","with","a","variety","of","PennyLane","functions","that","require","only","a","single","trainable","parameter",".","*","*","Example","*","*","This","symbolic","operator","can","be","used","to","make","general","rotation","operators",":",">",">",">","theta","=","np.array","(","1.23",")",">",">",">","op","=","Evolution","(","qml.PauliX","(","0",")",",","0.5","*","theta",")",">",">",">","qml.math.allclose","(","op.matrix","(",")",",","qml.RX","(","theta",",","wires=0",")",".matrix","(",")",")","True","Or","to","define","a","time","evolution","operator","for","a","time-independent","Hamiltonian",":",">",">",">","H","=","qml.Hamiltonian","(","[","1",",","1","]",",","[","qml.PauliY","(","0",")",",","qml.PauliX","(","1",")","]",")",">",">",">","t","=","10e-6",">",">",">","U","=","Evolution","(","H",",","t",")","If","the","base","operator","is","Hermitian",",","then","the","gate","can","be","used","in","a","circuit",",","though","it","may","not","be","supported","by","the","device","and","may","not","be","differentiable",".",">",">",">","@","qml.qnode","(","qml.device","(","'default.qubit","'",",","wires=1",")",")","...","def","circuit","(","x",")",":","...","qml.ops.Evolution","(","qml.PauliX","(","0",")",",","0.5","*","x",")","...","return","qml.expval","(","qml.PauliZ","(","0",")",")",">",">",">","print","(","qml.draw","(","circuit",")","(","1.23",")",")","0",":","\u2500\u2500Exp","(","-0.61j","X",")","\u2500\u2524","<","Z",">"]
code: def coeff(self):
      return -1j * self.data[0]
  
file_path: pennylane/pennylane/ops/op_math/evolution.py
imports: from copy import copy
  from warnings import warn
  import pennylane
  from pennylane import math
  from pennylane.operation import GeneratorUndefinedError
  from .exp import Exp
label_desc: Use image node_id 6 for calling the Evolution obj's underlying member method code with example usage: obj.coeff() and returns: unknown