
    {	i                        S r SSKJr  SSKJr  SSKJrJr  SSKr	SSK
Jr  SSKJrJrJrJr  SSKJr  SS	KJr  SS
KJr  SSKJr  \ " S S5      5       r " S S\5      rg)z$Estimator V2 implementation for Aer.    )annotations)Iterable)	dataclassfieldN)BaseEstimatorV2)DataBinEstimatorPubLikePrimitiveResult	PubResult)EstimatorPub)PrimitiveJob)Pauli)AerSimulatorc                  X    \ rS rSr% SrSrS\S'    \" \S9r	S\S'    \" \S9r
S\S	'   S
rg)Options   z#Options for :class:`~.EstimatorV2`.        floatdefault_precision)default_factorydictbackend_optionsrun_options N)__name__
__module____qualname____firstlineno____doc__r   __annotations__r   r   r   r   __static_attributes__r       \/home/james-whalen/.local/lib/python3.13/site-packages/qiskit_aer/primitives/estimator_v2.pyr   r      s;    -"u" "$7OT7:d3K3-r"   r   c                      \ rS rSrSrSS. SS jjr\S 5       r\SS j5       r	SS.     SS	 jjr
SS
 jrSS jrSS jrSrg)EstimatorV2-   a  Evaluates expectation values for provided quantum circuit and observable combinations.

Run a fast simulation using Aer.
Sampling from a normal distribution ``N(expval, precison)`` when set to ``precision``.

* ``default_precision``: The default precision to use if none are specified in :meth:`~run`.
  Default: 0.0.

* ``backend_options``: Options passed to AerSimulator.
  Default: {}.

* ``run_options``: Options passed to :meth:`AerSimulator.run`.
  Default: {}.
N)optionsc                   U(       a  [        S0 UD6O	[        5       U l        [        S0 U R                  R                  D6U l        g)z
Args:
    options: The options to control the default precision (``default_precision``),
        the backend options (``backend_options``), and
        the runtime options (``run_options``).
Nr   )r   _optionsr   r'   r   _backend)selfr'   s     r#   __init__EstimatorV2.__init__=   s2     /6*'*79$Dt||'C'CDr"   c                    U " S0 UD6n[        U[        5      (       a  Xl        U$ [        R                  " U5      Ul        U$ )z+make new sampler that uses external backendr   )
isinstancer   r*   from_backend)clsbackendr'   	estimators       r#   r0   EstimatorV2.from_backendK   sE     N'N	g|,,!(  ".!:!:7!CIr"   c                    U R                   $ )zReturn the options)r)   )r+   s    r#   r'   EstimatorV2.optionsU   s     }}r"   )	precisionc                   Uc  U R                   R                  nU Vs/ s H  n[        R                  " X25      PM     nnU R	                  U5        [        U R                  U5      nUR                  5         U$ s  snf )N)r)   r   r   coerce_validate_pubsr   _run_submit)r+   pubsr7   pubcoerced_pubsjobs         r#   runEstimatorV2.runZ   sj     77IGKLt++C;tLL)499l3
	 Ms    A9c                    [        U5       H2  u  p#UR                  S:  d  M  [        SU SUR                   S3S5      e   g )Nr   zThe z#-th pub has precision less than 0 (z). z2But precision should be equal to or larger than 0.)	enumerater7   
ValueError)r+   r=   ir>   s       r#   r:   EstimatorV2._validate_pubse   sE    oFA}}s" 1#@sSH  &r"   c                b    [        U Vs/ s H  o R                  U5      PM     snSS0S9$ s  snf )Nversion   metadata)r
   _run_pub)r+   r=   r>   s      r#   r;   EstimatorV2._runm   s-    dCdsc 2dCyZ[n]]Cs   ,c                   UR                   R                  5       nUR                  nUR                  nUR                  nUR
                  n[        R                  " [        R                  " U5      [        S9R                  U5      n[        R                  " Xs5      u  p0 n
UR                  UR                  5      n[        UR                  5       VVs0 s H  u  pXSU4   R                  5       _M     n
nnUR                  5        VVs1 s H  oR!                  5         H  oiM     M     nnnU H0  nUR#                  [%        U5      ['        UR(                  5      US9  M2     U R*                  R,                  " U4SU
/0U R.                  R0                  D6R3                  5       n[5        UR                  5       5      n[        R6                  " U[8        S9n[        R:                  " UR
                  U5      n[        R                  " UR
                  6  HZ  nUU   nUR=                  U5      nU	U   R?                  5        H*  u  nnURA                  U5      U   nUU==   UU-  -  ss'   M,     M\     US:  a  [        RB                  RE                  U R.                  R0                  RG                  S5      5      n[        RH                  " [        RJ                  " U5      5      (       d  [M        S5      eURO                  UUUR
                  5      n[Q        [S        UUUR
                  S9UUR                   RT                  URT                  S	.S
9$ s  snnf s  snnf )N)dtype.)qubitslabelparameter_bindsr   seed_simulatorz:Given operator is not Hermitian and noise cannot be added.)evsstdsshape)target_precisioncircuit_metadatasimulator_metadatarK   )+circuitcopyobservablesparameter_valuesr7   rW   npfromiterndindexobjectreshapebroadcast_arraysas_array
parametersrD   ravelkeyssave_expectation_valuer   range
num_qubitsr*   rA   r'   r   resultlist
zeros_liker   fullindexitemsdatarandomdefault_rnggetallisrealrE   normalr   r   rL   )r+   r>   r[   r]   r^   r7   param_shapeparam_indicesbc_param_indbc_obsrS   param_arrayrF   pobs_dictpaulipaulisrl   flat_indicesrU   rV   rp   param_index
flat_indexcoeffexpvalrngs                              r#   rM   EstimatorV2._run_pubp   s   ++""$oo//MM	 ',,BJJ{$;6JRRS^_!22=N&//0B0BCFOPWPbPbFcdFcda1#q&17799Fcd )4(9(9(;Y(;H%%(;YE**eU7+=+=%>e +   ""
&5%6
:>,,:R:R

&( 	
 M//12mmL6ww|))95ZZ!3!34E&u-K%++K8J &u 3 3 5uZ07E
fun,
 !6 5 q=))''(@(@(D(DEU(VWC66"))C.)) !]^^**S)SYY7C$cii8$-$'KK$8$8&,oo
 	
7 e Zs   !M"M)r*   r)   )r'   zdict | None)returnr   )r=   zIterable[EstimatorPubLike]r7   zfloat | Noner   z(PrimitiveJob[PrimitiveResult[PubResult]])r=   list[EstimatorPub])r=   r   r   zPrimitiveResult[PubResult])r>   r   r   r   )r   r   r   r   r   r,   classmethodr0   propertyr'   rA   r:   r;   rM   r!   r   r"   r#   r%   r%   -   sy    $  $E E    
 NR	.	>J		1	^/
r"   r%   )r   
__future__r   collections.abcr   dataclassesr   r   numpyr_   qiskit.primitives.baser   qiskit.primitives.containersr   r	   r
   r   *qiskit.primitives.containers.estimator_pubr   qiskit.primitives.primitive_jobr   qiskit.quantum_infor   
qiskit_aerr   r   r%   r   r"   r#   <module>r      sR    + " $ (  2 ^ ^ C 8 % # . . .r
/ r
r"   