§
    ²Ûgã  ã                  óÔ   — d Z ddlmZ ddlmZ ddlmZmZ ddlZ	ddl
mZ ddlmZmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZ e G d„ d¦  «        ¦   «         Z G d„ de¦  «        ZdS )z$Estimator V2 implementation for Aer.é    )Úannotations)ÚIterable)Ú	dataclassÚfieldN)ÚBaseEstimatorV2)ÚDataBinÚEstimatorPubLikeÚPrimitiveResultÚ	PubResult)ÚEstimatorPub)ÚPrimitiveJob)ÚPauli)ÚAerSimulatorc                  ój   — e Zd ZU dZdZded<   	  ee¬¦  «        Zded<   	  ee¬¦  «        Z	ded<   d	S )
ÚOptionsz#Options for :class:`~.EstimatorV2`.ç        ÚfloatÚdefault_precision)Údefault_factoryÚdictÚbackend_optionsÚrun_optionsN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r   r   r   r   © ó    úX/granary/edev/quantum/lib/python3.11/site-packages/qiskit_aer/primitives/estimator_v2.pyr   r      sp   € € € € € € à-Ð-à"ÐÐ"Ð"Ð"Ñ"ðð "˜E°$Ð7Ñ7Ô7€OÐ7Ð7Ð7Ñ7Ø:à˜¨dÐ3Ñ3Ô3€KÐ3Ð3Ð3Ñ3Ø-Ð-r   r   c                  ót   — e Zd ZdZddœdd„Zed„ ¦   «         Zedd
„¦   «         Zddœdd„Z	dd„Z
dd„Zdd„ZdS ) ÚEstimatorV2aø  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)Úoptionsr#   údict | Nonec               ó~   — |rt          di |¤Žnt          ¦   «         | _        t          di | j        j        ¤Ž| _        dS )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__zEstimatorV2.__init__=   sE   € ð /6ÐD�Ð*Ð* 'Ð*Ð*Ð*½7¹9¼9ˆŒÝ$ÐDÐD t¤|Ô'CÐDÐDˆŒˆˆr   c                ó‚   —  | di |¤Ž}t          |t          ¦  «        r||_        nt          j        |¦  «        |_        |S )z+make new sampler that uses external backendr   )Ú
isinstancer   r'   Úfrom_backend)ÚclsÚbackendr#   Ú	estimators       r    r,   zEstimatorV2.from_backendK   sL   € ð �C�N�N˜'�N�Nˆ	Ý�g�|Ñ,Ô,ð 	DØ!(ˆIÔÐå!-Ô!:¸7Ñ!CÔ!CˆIÔØÐr   Úreturnr   c                ó   — | j         S )zReturn the options)r&   )r(   s    r    r#   zEstimatorV2.optionsU   s   € ð Œ}Ðr   )Ú	precisionÚpubsúIterable[EstimatorPubLike]r2   úfloat | Noneú(PrimitiveJob[PrimitiveResult[PubResult]]c               ó¼   ‡— ‰€| j         j        Šˆfd„|D ¦   «         }|                      |¦  «         t          | j        |¦  «        }|                     ¦   «          |S )Nc                ó:   •— g | ]}t          j        |‰¦  «        ‘ŒS r   )r   Úcoerce)Ú.0Úpubr2   s     €r    ú
<listcomp>z#EstimatorV2.run.<locals>.<listcomp>_   s&   ø€ ÐLÐLÐLÀ�Ô+¨C°Ñ;Ô;ÐLÐLÐLr   )r&   r   Ú_validate_pubsr   Ú_runÚ_submit)r(   r3   r2   Úcoerced_pubsÚjobs     `  r    ÚrunzEstimatorV2.runZ   se   ø€ ð ÐØœÔ7ˆIØLÐLÐLÐLÀtÐLÑLÔLˆØ×Ò˜LÑ)Ô)Ð)Ý˜4œ9 lÑ3Ô3ˆØ�Š‰ŒˆØˆ
r   úlist[EstimatorPub]c                ó~   — t          |¦  «        D ],\  }}|j        dk     rt          d|› d|j        › d�d¦  «        ‚Œ-d S )Nr   zThe z#-th pub has precision less than 0 (z). z2But precision should be equal to or larger than 0.)Ú	enumerater2   Ú
ValueError)r(   r3   Úir;   s       r    r=   zEstimatorV2._validate_pubse   sd   € Ý ‘o”oð 	ð 	‰FˆAˆsØŒ}˜sÒ"Ð"Ý ØS˜1ÐSÐSÀÄÐSÐSÐSØHñô ð ð #ð	ð 	r   úPrimitiveResult[PubResult]c                óB   ‡ — t          ˆ fd„|D ¦   «         ddi¬¦  «        S )Nc                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r   )Ú_run_pub)r:   r;   r(   s     €r    r<   z$EstimatorV2._run.<locals>.<listcomp>n   s%   ø€ ÐCÐCÐC°s §¢¨cÑ 2Ô 2ÐCÐCÐCr   Úversioné   ©Úmetadata)r
   )r(   r3   s   ` r    r>   zEstimatorV2._runm   s0   ø€ ÝÐCÐCÐCÐC¸dÐCÑCÔCÈyÐZ[ÈnÐ]Ñ]Ô]Ð]r   r;   r   r   c                óô  ‡— |j                              ¦   «         }|j        }|j        }|j        }|j        }t          j        t          j        |¦  «        t          ¬¦  «         
                    |¦  «        }t          j        ||¦  «        \  }}	i }
|                     |j        ¦  «        Šˆfd„t          |j        ¦  «        D ¦   «         }
d„ |                     ¦   «         D ¦   «         }|D ]9}|                     t#          |¦  «        t%          |j        ¦  «        |¬¦  «         Œ: | j        j        |fd|
gi| j        j        ¤Ž                     ¦   «         }t3          |                     ¦   «         ¦  «        }t          j        |t6          ¬¦  «        }t          j        |j        |¦  «        }t          j        |j        Ž D ]m}||         }|                     |¦  «        }|	|                              ¦   «         D ]3\  }}|                     |¦  «        |         }||xx         ||z  z  cc<   Œ4Œn|dk    r�t          j          !                    | j        j         "                    d¦  «        ¦  «        }t          j#        t          j$        |¦  «        ¦  «        stK          d¦  «        ‚| &                    |||j        ¦  «        }tO          tQ          |||j        ¬	¦  «        ||j         j)        |j)        d
œ¬¦  «        S )N)Údtypec                óP   •— i | ]"\  }}|‰d |f                               ¦   «         “Œ#S ).)Úravel)r:   rG   ÚpÚparam_arrays      €r    ú
<dictcomp>z(EstimatorV2._run_pub.<locals>.<dictcomp>}   s4   ø€ ÐdÐdÐd¹d¸aÀ˜1˜k¨#¨q¨&Ô1×7Ò7Ñ9Ô9ÐdÐdÐdr   c                ó@   — h | ]}|                      ¦   «         D ]}|’ŒŒS r   )Úkeys)r:   Úobs_dictÚpaulis      r    ú	<setcomp>z'EstimatorV2._run_pub.<locals>.<setcomp>€   s-   € ÐYÐYÐY˜HÈÏÊÉÌÐYÐYÀ�%ÐYÐYÐYÐYr   )ÚqubitsÚlabelÚparameter_bindsr   Úseed_simulatorz:Given operator is not Hermitian and noise cannot be added.)ÚevsÚstdsÚshape)Útarget_precisionÚcircuit_metadataÚsimulator_metadatarN   )*ÚcircuitÚcopyÚobservablesÚparameter_valuesr2   rb   ÚnpÚfromiterÚndindexÚobjectÚreshapeÚbroadcast_arraysÚas_arrayÚ
parametersrE   rS   Úsave_expectation_valuer   ÚrangeÚ
num_qubitsr'   rB   r#   r   ÚresultÚlistÚ
zeros_liker   ÚfullÚindexÚitemsÚdataÚrandomÚdefault_rngÚgetÚallÚisrealrF   Únormalr   r   rO   )r(   r;   rf   rh   ri   r2   Úparam_shapeÚparam_indicesÚbc_param_indÚbc_obsr^   ÚpaulisrZ   ru   Úflat_indicesr`   ra   ry   Úparam_indexÚ
flat_indexÚcoeffÚexpvalÚrngrU   s                          @r    rK   zEstimatorV2._run_pubp   s÷  ø€ Ø”+×"Ò"Ñ$Ô$ˆØ”oˆØÔ/ÐØ”Mˆ	ð 'Ô,ˆÝœ¥B¤J¨{Ñ$;Ô$;Å6ÐJÑJÔJ×RÒRÐS^Ñ_Ô_ˆÝ!Ô2°=À+ÑNÔNÑˆ�fàˆØ&×/Ò/°Ô0BÑCÔCˆØdÐdÐdÐdÅiÐPWÔPbÑFcÔFcÐdÑdÔdˆð ZÐY¨×(9Ò(9Ñ(;Ô(;ÐYÑYÔYˆØð 	ð 	ˆEØ×*Ò*Ý�e‘”¥U¨7Ô+=Ñ%>Ô%>Àeð +ñ ô ð ð ð #�”Ô"Øð
ð 
Ø&5Ð%6ð
Ø:>¼,Ô:Rð
ð 
ç
Š&‰(Œ(ð 	õ
 ˜M×/Ò/Ñ1Ô1Ñ2Ô2ˆÝŒm˜LµÐ6Ñ6Ô6ˆÝŒw�|Ô)¨9Ñ5Ô5ˆÝ”Z Ô!3Ð4ð 	-ð 	-ˆEØ& uÔ-ˆKØ%×+Ò+¨KÑ8Ô8ˆJØ & u¤× 3Ò 3Ñ 5Ô 5ð -ð -‘��uØŸš ZÑ0Ô0°Ô7�Ø�E�
�
”
˜f u™nÑ,�
�
‘
�
ð-ð �qŠ=ˆ=Ý”)×'Ò'¨¬Ô(@×(DÒ(DÐEUÑ(VÔ(VÑWÔWˆCÝ”6�"œ) C™.œ.Ñ)Ô)ð _Ý Ð!]Ñ^Ô^Ð^Ø—*’*˜S )¨S¬YÑ7Ô7ˆCÝÝ˜ $¨c¬iÐ8Ñ8Ô8à$-Ø$'¤KÔ$8Ø&,¤oðð ð
ñ 
ô 
ð 	
r   )r#   r$   )r0   r   )r3   r4   r2   r5   r0   r6   )r3   rC   )r3   rC   r0   rH   )r;   r   r0   r   )r   r   r   r   r)   Úclassmethodr,   Úpropertyr#   rB   r=   r>   rK   r   r   r    r"   r"   -   sç   € € € € € ðð ð$  $ðEð Eð Eð Eð Eð Eð ðð ñ „[ðð ðð ð ñ „Xðð
 NRð	ð 	ð 	ð 	ð 	ð 	ðð ð ð ð^ð ^ð ^ð ^ð/
ð /
ð /
ð /
ð /
ð /
r   r"   )r   Ú
__future__r   Úcollections.abcr   Údataclassesr   r   Únumpyrj   Ú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™      sE  ðð +Ð *à "Ð "Ð "Ð "Ð "Ð "à $Ð $Ð $Ð $Ð $Ð $Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (à Ð Ð Ð Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ð ^Ø CÐ CÐ CÐ CÐ CÐ CØ 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø %Ð %Ð %Ð %Ð %Ð %à #Ð #Ð #Ð #Ð #Ð #ð ð.ð .ð .ð .ð .ñ .ô .ñ „ð.ðr
ð r
ð r
ð r
ð r
�/ñ r
ô r
ð r
ð r
ð r
r   