§
    ²ÛgY!  ã                  ó  — d Z ddlmZ ddlZddlmZ ddlmZmZ ddl	m
Z
 ddlZddlmZmZmZmZ ddlmZ dd	lmZ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d„Z$dd„Z%dS )z
Sampler V2 class.
é    )ÚannotationsN)Údefaultdict)Ú	dataclassÚfield)ÚIterable)Ú_analyze_circuitÚ_MeasureInfoÚ_memory_arrayÚ_samples_to_packed_array)ÚBaseSamplerV2)ÚBitArrayÚDataBinÚPrimitiveResultÚSamplerPubLikeÚSamplerPubResult)Ú
SamplerPub)ÚPrimitiveJob)ÚResult)ÚAerSimulatorc                  óZ   — e Zd ZU dZ ee¬¦  «        Zded<   	  ee¬¦  «        Zded<   dS )ÚOptionsz!Options for :class:`~.SamplerV2`.)Údefault_factoryÚdictÚbackend_optionsÚrun_optionsN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   Ú__annotations__r   © ó    úV/granary/edev/quantum/lib/python3.11/site-packages/qiskit_aer/primitives/sampler_v2.pyr   r   .   sW   € € € € € € à+Ð+à!˜E°$Ð7Ñ7Ô7€OÐ7Ð7Ð7Ñ7Ø:à˜¨dÐ3Ñ3Ô3€KÐ3Ð3Ð3Ñ3Ø-Ð-r"   r   c                  ó°   — e Zd ZdZddddœd*d„Zed„ ¦   «         Zed+d„¦   «         Zed,d„¦   «         Z	ed-d„¦   «         Z
ddœd.d„Zd/d„Zd0d„Zd1d„Zd2d)„ZdS )3Ú	SamplerV2a½  
    Aer implementation of SamplerV2 class.

    Each tuple of ``(circuit, <optional> parameter values, <optional> shots)``, called a sampler
    primitive unified bloc (PUB), produces its own array-valued result. The :meth:`~run` method can
    be given many pubs at once.

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

    * ``run_options``: Options passed to :meth:`AerSimulator.run`.
      Default: {}.

    i   N)Údefault_shotsÚseedÚoptionsr&   Úintr'   ú
int | Noner(   údict | Nonec               óš   — || _         || _        |rt          di |¤Žnt          ¦   «         | _        t	          di | j        j        ¤Ž| _        dS )ay  
        Args:
            default_shots: The default shots for the sampler if not specified during run.
            seed: The seed for random number generation.
                If None, a random seeded default RNG will be used.
            options:
                the backend options (``backend_options``), and
                the runtime options (``run_options``).

        Nr!   )Ú_default_shotsÚ_seedr   Ú_optionsr   r(   r   Ú_backend)Úselfr&   r'   r(   s       r#   Ú__init__zSamplerV2.__init__I   sT   € ð" ,ˆÔØˆŒ
à.5Ð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   r0   Úfrom_backend)ÚclsÚbackendr(   Úsamplers       r#   r5   zSamplerV2.from_backend`   sK   € ð �#�.�.˜�.�.ˆÝ�g�|Ñ,Ô,ð 	BØ&ˆGÔÐå+Ô8¸ÑAÔAˆGÔØˆr"   Úreturnc                ó   — | j         S )zReturn the default shots)r-   ©r1   s    r#   r&   zSamplerV2.default_shotsj   s   € ð Ô"Ð"r"   c                ó   — | j         S )z-Return the seed for random number generation.)r.   r;   s    r#   r'   zSamplerV2.seedo   s   € ð ŒzÐr"   r   c                ó   — | j         S )zReturn the options)r/   r;   s    r#   r(   zSamplerV2.optionst   s   € ð Œ}Ðr"   )ÚshotsÚpubsúIterable[SamplerPubLike]r>   ú/PrimitiveJob[PrimitiveResult[SamplerPubResult]]c               ó²   ‡— ‰€| j         Šˆfd„|D ¦   «         }|                      |¦  «         t          | j        |¦  «        }|                     ¦   «          |S )Nc                ó:   •— g | ]}t          j        |‰¦  «        ‘ŒS r!   )r   Úcoerce)Ú.0Úpubr>   s     €r#   ú
<listcomp>z!SamplerV2.run.<locals>.<listcomp>~   s&   ø€ ÐFÐFÐF¸#�
Ô)¨#¨uÑ5Ô5ÐFÐFÐFr"   )r-   Ú_validate_pubsr   Ú_runÚ_submit)r1   r?   r>   Úcoerced_pubsÚjobs     `  r#   ÚrunzSamplerV2.runy   sb   ø€ ð ˆ=ØÔ'ˆEØFÐFÐFÐFÀÐFÑFÔFˆØ×Ò˜LÑ)Ô)Ð)Ý˜4œ9 lÑ3Ô3ˆØ�Š‰ŒˆØˆ
r"   úlist[SamplerPub]c                ó¦   — t          |¦  «        D ]@\  }}t          |j        j        ¦  «        dk    rt	          j        d|› d�t          ¦  «         ŒAd S )Nr   zThe z‚-th pub's circuit has no output classical registers and so the result will be empty. Did you mean to add measurement instructions?)Ú	enumerateÚlenÚcircuitÚcregsÚwarningsÚwarnÚUserWarning)r1   r?   ÚirF   s       r#   rH   zSamplerV2._validate_pubs„   so   € Ý ‘o”oð 	ð 	‰FˆAˆsÝ�3”;Ô$Ñ%Ô%¨Ò*Ð*Ý”ðS˜1ð Sð Sð Såñô ð øð	ð 	r"   ú!PrimitiveResult[SamplerPubResult]c                ó�  ‡— t          t          ¦  «        }t          ‰¦  «        D ]%\  }}||j                                      |¦  «         Œ&d gt          ‰¦  «        z  }|                     ¦   «         D ]B\  }}|                      ˆfd„|D ¦   «         |¦  «        }t          ||¦  «        D ]
\  }}	|	||<   ŒŒCt          |ddi¬¦  «        S )Nc                ó    •— g | ]
}‰|         ‘ŒS r!   r!   )rE   rW   r?   s     €r#   rG   z"SamplerV2._run.<locals>.<listcomp>–   s   ø€ Ð)?Ð)?Ð)?°a¨$¨q¬'Ð)?Ð)?Ð)?r"   Úversioné   ©Úmetadata)
r   ÚlistrP   r>   ÚappendrQ   ÚitemsÚ	_run_pubsÚzipr   )
r1   r?   Úpub_dictrW   rF   Úresultsr>   ÚlstÚpub_resultsÚ
pub_results
    `        r#   rI   zSamplerV2._run�   sâ   ø€ Ý�tÑ$Ô$ˆå ‘o”oð 	*ð 	*‰FˆAˆsØ�S”YÔ×&Ò& qÑ)Ô)Ð)Ð)à�&�3˜t™9œ9Ñ$ˆØ"Ÿ.š.Ñ*Ô*ð 	(ð 	(‰JˆE�3àŸ.š.Ð)?Ð)?Ð)?Ð)?¸3Ð)?Ñ)?Ô)?ÀÑGÔGˆKå!$ S¨+Ñ!6Ô!6ð (ð (‘��:Ø'�˜‘
�
ð(å˜w°)¸Q°Ð@Ñ@Ô@Ð@r"   úlist[SamplerPubResult]c                ó  — d„ |D ¦   «         }d„ |D ¦   «         }| j         j                             ¦   «         }dD ]	}||v r||= Œ
| j        �d|v r|d=  | j        j        |f|| j        |ddœ|¤Ž                     ¦   «         }t          |¦  «        }g }	d}
|D ]v}t          |j	        ¦  «        \  }}|j
        }|
|j        z   }|	                     |                      ||
|…         ||j        |||j	        j        |j        ¦  «        ¦  «         |}
Œw|	S )	zFCompute results for pubs that all require the same value of ``shots``.c                ó   — g | ]	}|j         ‘Œ
S r!   )rR   ©rE   rF   s     r#   rG   z'SamplerV2._run_pubs.<locals>.<listcomp>ž   s   € Ð0Ð0Ð0 C�C”KÐ0Ð0Ð0r"   c                ó,   — g | ]}t          |¦  «        ‘ŒS r!   )Ú_convert_parameter_bindingsrl   s     r#   rG   z'SamplerV2._run_pubs.<locals>.<listcomp>Ÿ   s!   € ÐLÐLÐLÀÕ6°sÑ;Ô;ÐLÐLÐLr"   )r>   Úparameter_bindsÚmemoryNÚseed_simulatorT)r>   rq   ro   rp   r   )r(   r   Úcopyr.   r0   rM   ÚresultÚ_prepare_memoryr   rR   Úparameter_valuesÚsizer`   Ú_postprocess_pubÚshaper^   )r1   r?   r>   Úcircuitsro   r   Úkeyrs   Úresult_memoryre   ÚstartrF   Ú	meas_infoÚmax_num_bytesÚp_vÚends                   r#   rb   zSamplerV2._run_pubsœ   sz  € à0Ð0¨4Ð0Ñ0Ô0ˆØLÐLÀtÐLÑLÔLˆð ”lÔ.×3Ò3Ñ5Ô5ˆØ9ð 	%ð 	%ˆCØ�kÐ!Ð!Ø Ð$øØŒ:Ð!Ð&6¸+Ð&EÐ&EØÐ,Ð-ð #�”Ô"Øð
àØœ:Ø+Øð
ð 
ð ð
ð 
÷ Š&‰(Œ(ð 	õ (¨Ñ/Ô/ˆð ˆØˆØð 	ð 	ˆCÝ'7¸¼Ñ'DÔ'DÑ$ˆI�}ØÔ&ˆCØ˜#œ(Ñ"ˆCØ�NŠNØ×%Ò%Ø! %¨ )Ô,ØØ”IØØ!Ø”KÔ(Ø”Oñô ñ
ô 
ð 
ð ˆEˆEàˆr"   r{   úlist[list[str]]rx   útuple[int, ...]r}   úlist[_MeasureInfo]r~   Úcircuit_metadatar   Úsimulator_metadatar   c                óL  ‡‡‡— ˆˆfd„|D ¦   «         Št          ||¦  «        }t          |t          j        ‰Ž ¦  «        D ]5\  }	}
|D ]-}t	          |	|j        |j        ¦  «        }|‰|j                 |
<   Œ.Œ6ˆfd„|D ¦   «         }t          t          di |¤d‰i¤Ž‰||dœ¬¦  «        S )zOConverts the memory data into an array of bit arrays with the shape of the pub.c                óp   •— i | ]2}|j         t          j        ‰‰|j        fz   t          j        ¬ ¦  «        “Œ3S ))Údtype)Ú	creg_nameÚnpÚzerosÚ	num_bytesÚuint8)rE   Úitemrx   r>   s     €€r#   ú
<dictcomp>z.SamplerV2._postprocess_pub.<locals>.<dictcomp>Ö   sJ   ø€ ð 
ð 
ð 
àð ŒN�BœH U¨e°T´^Ð-DÑ%DÍBÌHÐUÑUÔUð
ð 
ð 
r"   c                ó\   •— i | ](}|j         t          ‰|j                  |j        ¦  «        “Œ)S r!   )r‰   r   Únum_bits)rE   rŽ   Úarrayss     €r#   r�   z.SamplerV2._postprocess_pub.<locals>.<dictcomp>á   s=   ø€ ð 
ð 
ð 
ØPTˆDŒN�H V¨D¬NÔ%;¸T¼]ÑKÔKð
ð 
ð 
r"   rx   )r>   r„   r…   r]   r!   )
r
   rc   rŠ   Úndindexr   r‘   r|   r‰   r   r   )r1   r{   r>   rx   r}   r~   r„   r…   Úmemory_arrayÚsamplesÚindexrŽ   ÚaryÚmeasr’   s     ``          @r#   rw   zSamplerV2._postprocess_pubË   s  øøø€ ð
ð 
ð 
ð 
ð 
à!ð
ñ 
ô 
ˆõ % ]°MÑBÔBˆå! ,µ´
¸EÐ0BÑCÔCð 	4ð 	4‰NˆG�UØ!ð 4ð 4�Ý.¨w¸¼ÀtÄzÑRÔR�Ø03��t”~Ô& uÑ-Ð-ð4ð
ð 
ð 
ð 
ØXað
ñ 
ô 
ˆõ  ÝÐ(Ð(�dÐ(Ð( %Ð(Ð(Ð(àØ$4Ø&8ðð ð
ñ 
ô 
ð 	
r"   )r&   r)   r'   r*   r(   r+   )r9   r)   )r9   r*   )r9   r   )r?   r@   r>   r*   r9   rA   )r?   rN   )r?   rN   r9   rX   )r?   rN   r>   r)   r9   ri   )r{   r�   r>   r)   rx   r‚   r}   rƒ   r~   r)   r„   r   r…   r   r9   r   )r   r   r   r   r2   Úclassmethodr5   Úpropertyr&   r'   r(   rM   rH   rI   rb   rw   r!   r"   r#   r%   r%   9   sB  € € € € € ðð ð$ "ØØ#ðEð Eð Eð Eð Eð Eð. ðð ñ „[ðð ð#ð #ð #ñ „Xð#ð ðð ð ñ „Xðð ðð ð ñ „Xðð
 FJð	ð 	ð 	ð 	ð 	ð 	ðð ð ð ðAð Að Að Að-ð -ð -ð -ð^ 
ð  
ð  
ð  
ð  
ð  
r"   r%   rF   r   r9   r   c                óœ   ‡— | j         }| j        }i }|                     |j        ¦  «        Šˆfd„t	          |j        ¦  «        D ¦   «         }|S )Nc                óP   •— i | ]"\  }}|‰d |f                               ¦   «         “Œ#S ).)Úravel)rE   rW   ÚpÚparam_arrays      €r#   r�   z/_convert_parameter_bindings.<locals>.<dictcomp>ó   s4   ø€ Ð`Ð`Ð`¹$¸!¸Q�q˜+ c¨1 fÔ-×3Ò3Ñ5Ô5Ð`Ð`Ð`r"   )rR   ru   Úas_arrayÚ
parametersrP   )rF   rR   ru   ro   rŸ   s       @r#   rn   rn   î   sX   ø€ ØŒk€GØÔ+ÐØ€OØ"×+Ò+¨GÔ,>Ñ?Ô?€KØ`Ð`Ð`Ð`Å)ÈGÔL^ÑB_ÔB_Ð`Ñ`Ô`€OØÐr"   rs   r   r�   c                óÜ   — g }| j         D ]a}t          |j        d¦  «        r,|j        j        r |                     |j        j        ¦  «         ŒC|                     dg|j        z  ¦  «         Œb|S )z;There is no split of results due to max_experiments for Aerrp   Ú0x0)re   ÚhasattrÚdatarp   r`   r>   )rs   rf   Úexps      r#   rt   rt   ÷   su   € à
€CØŒ~ð ,ð ,ˆÝ�3”8˜XÑ&Ô&ð 	,¨3¬8¬?ð 	,Ø�JŠJ�s”x”Ñ'Ô'Ð'Ð'ð �JŠJ˜�w ¤Ñ*Ñ+Ô+Ð+Ð+Ø€Jr"   )rF   r   r9   r   )rs   r   r9   r�   )&r   Ú
__future__r   rT   Úcollectionsr   Údataclassesr   r   Útypingr   ÚnumpyrŠ   Ú$qiskit.primitives.backend_sampler_v2r   r	   r
   r   Úqiskit.primitives.baser   Úqiskit.primitives.containersr   r   r   r   r   Ú(qiskit.primitives.containers.sampler_pubr   Úqiskit.primitives.primitive_jobr   Úqiskit.resultr   Ú
qiskit_aerr   r   r%   rn   rt   r!   r"   r#   ú<module>r³      sî  ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø #Ð #Ð #Ð #Ð #Ð #Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð à Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð 1Ð 0Ð 0Ð 0Ð 0Ð 0ðð ð ð ð ð ð ð ð ð ð ð ð ð ð @Ð ?Ð ?Ð ?Ð ?Ð ?Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø  Ð  Ð  Ð  Ð  Ð  à #Ð #Ð #Ð #Ð #Ð #ð ð.ð .ð .ð .ð .ñ .ô .ñ „ð.ðr
ð r
ð r
ð r
ð r
�ñ r
ô r
ð r
ðjð ð ð ð	ð 	ð 	ð 	ð 	ð 	r"   