
    {	i)3                        S r SSKJr  SSKJrJr  SSKJr  SSKr	SSK
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Jr  SSKJr  SSKJr  SSKJr  SS jrSS jrSS jrS r SSS jjr! " S S\5      r" " S S5      r#g)z
Sampler class.
    )annotations)SequenceIterable)warnN)ParameterExpressionQuantumCircuitQubit)
Initialize)	transpile)QiskitError)BaseSamplerV1SamplerResult)Statevector)QuasiDistribution   )AerSimulatorc                    [        U [        5      (       a  U $ [        U [        5      (       d  [        U 5      n [        U R                  5      nUR	                  [        U 5      [        U R                  5      S9  U$ )zInitialize state by converting the input to a quantum circuit.

Args:
    state: The state as quantum circuit or statevector.

Returns:
    The state as quantum circuit.
)qargs)
isinstancer   r   
num_qubitsappendr
   range)stateqcs     W/home/james-whalen/.local/lib/python3.13/site-packages/qiskit_aer/primitives/sampler.pyinit_circuitr   "   sb     %((e[))E"	((	)BIIjuU-=-='>I?I    c                   [        [        U R                  5      5      n[        [        U R                  5      5      n0 nU R                  SSS2    GH  nUR
                  R                  S:X  a  U R                  UR                  S   5      R                  nU R                  UR                  S   5      R                  nXR;   a+  Xa;   a&  XSU'   UR                  U5        UR                  U5        O`UR
                  R                  S;  aF  UR                   H6  nU R                  U5      R                  nX;   d  M%  UR                  U5        M8     U(       a
  U(       a  GM    O   [        [        UR                  5       S S95      nU$ )a6  Return the final measurement mapping for the circuit.

Dict keys label measured qubits, whereas the values indicate the
classical bit onto which that qubits measurement result is stored.

Parameters:
    circuit: Input quantum circuit.

Returns:
    Mapping of qubits to classical bits for final measurements.
Nmeasurer   )barrierdelayc                    U S   $ )N    )items    r   <lambda>+final_measurement_mapping.<locals>.<lambda>W   s    DGr   )key)listr   r   
num_clbits_data	operationnamefind_bitclbitsindexqubitsremovedictsorteditems)	circuitactive_qubitsactive_cbitsmappingr&   cbitqbitqq_temp_qubits	            r   final_measurement_mappingr?   4   s?    w1123Mg0012L Gdd#>>)+##DKKN399D##DKKN399D#(= $##D)$$T*^^  (<<kk%..r288/!((5 "
 == $$ 6'--//CDEGNr   c                .   ^ [        U4S jU  5       5      $ )Nc              3     >#    U  HK  nTR                  U5      R                  [        S  TR                  U5      R                   5       5      4v   MM     g7f)c              3  d   #    U  H&  oS    R                   US    R                  US   4v   M(     g7f)r   r$   N)sizer.   ).0regs     r   	<genexpr>&_bits_key.<locals>.<genexpr>.<genexpr>_   s+     `@_q6;;ASV4@_s   .0N)r/   r1   tuple	registers)rD   bitr7   s     r   rF   _bits_key.<locals>.<genexpr>\   sR      
 C S!''`@P@PQT@U@_@_``	
 s   AA)rH   )bitsr7   s    `r   	_bits_keyrM   [   s     
   r   c                    [        U [        R                  5      (       a  U R                  R	                  5       $ [        U [
        5      (       a  [        U 5      $ [        U [        5      (       a  [        U 5      $ U $ N)	r   npndarraydatatobytesr   _circuit_keyr   rH   )params    r   _format_paramsrV   e   sZ    %$$zz!!##	E>	*	*E""	E8	$	$U|Lr   c                   ^  T R                   T R                  T R                  [        U 4S jT R                   5       5      T R
                  c  SO[        T R
                  5      4nU(       a  U$ T R                  /UQ7$ )am  Private key function for QuantumCircuit.

This is the workaround until :meth:`QuantumCircuit.__hash__` will be introduced.
If key collision is found, please add elements to avoid it.

Args:
    circuit: Input quantum circuit.
    functional: If True, the returned key only includes functional data (i.e. execution related).

Returns:
    Composite key for circuit.
c              3     >#    U  Hk  n[        UR                  T5      [        UR                  T5      UR                  R                  [        S  UR                  R                   5       5      4v   Mm     g7f)c              3  8   #    U  H  n[        U5      v   M     g 7frO   )rV   )rD   rU   s     r   rF   )_circuit_key.<locals>.<genexpr>.<genexpr>   s     O9NnU++9Ns   N)rM   r2   r0   r-   r.   rH   params)rD   rR   r7   s     r   rF   _circuit_key.<locals>.<genexpr>   s_      
 % $++w/$++w/##O9N9NOO	 %s   A3A6N)r   r+   num_parametersrH   rR   _op_start_timesr.   )r7   
functionalfunctional_keys   `  r   rT   rT   o   s     	 
  
 	
 ''/U7;R;R5SN 	 r   c                     ^  \ rS rSrSrSSSSS.       SU 4S jjjr      SS jr    SS jr\SS	 j5       r	S
 r
SS jrSrU =r$ )Sampler   a?  
Aer implementation of Sampler class.

:Run Options:

    - **shots** (None or int) --
      The number of shots. If None, it calculates the probabilities exactly.
      Otherwise, it samples from multinomial distributions.

    - **seed** (int) --
      Set a fixed seed for ``seed_simulator``. If shots is None, this option is ignored.

.. note::
    Precedence of seeding is as follows:

    1. ``seed_simulator`` in runtime (i.e. in :meth:`__call__`)
    2. ``seed`` in runtime (i.e. in :meth:`__call__`)
    3. ``seed_simulator`` of ``backend_options``.
    4. default.
NF)backend_optionstranspile_optionsrun_optionsskip_transpilationc                  > [        S[        SS9  [        TU ]  US9  / U l        / U l        [        5       U l        Uc  0 OUnU R                  R                  " S0 UD6  Uc  0 OUU l	        X@l
        0 U l        0 U l        g)z
Args:
    backend_options: Options passed to AerSimulator.
    transpile_options: Options passed to transpile.
    run_options: Options passed to run.
    skip_transpilation: if True, transpilation is skipped.
zISampler has been deprecated as of Aer 0.15, please use SamplerV2 instead.   )
stacklevel)optionsNr%   )r   DeprecationWarningsuper__init__	_circuits_parametersr   _backendset_options_transpile_options_skip_transpilation_transpiled_circuits_circuit_ids)selfrd   re   rf   rg   	__class__s        r   rn   Sampler.__init__   s     	W	

 	- $ / 7"_!!4O4(9(A"GX#5 $&!r   c                ~   UR                  SS 5      nUb  UR                  SU5        SU;   =(       a    US   S L nU R                  X5        [        5       n[	        X5       H  u  px[        U5      [        U R                  U   5      :w  a1  [        S[        U5       S[        U R                  U   5       S35      eUR                  U[        [	        U R                  U   U5      5      U R                  Xu4   S9  M     U R                  R                  " UR                  4SUR                  0UD6R                  5       n	/ n
/ nUR                    GHS  nU(       a  U	R#                  U5      S	   nU	R$                  U   R&                  S
   n[)        UR+                  5        VVs0 s H  u  pUSU S3 U_M     snn5      nUR                  U5        U
R                  S U	R$                  U   R&                  S.5        M  U	R-                  U5      n[/        UR1                  5       5      nUR                  [)        UR+                  5        VVs0 s H  u  pUR3                  SS5      UU-  _M     snnUS95        U
R                  UU	R$                  U   R&                  S.5        GMV     [5        X5      $ s  snnf s  snnf )Nseedseed_simulatorshotszThe number of values (z+) does not match the number of parameters (z).)r)   parameter_bindexperiment_circuitparameter_bindsprobabilitiesr   0b)r}   simulator_metadata  )r}   )pop
setdefault
_transpile_ExperimentManagerziplenrp   r   r   r4   ru   rq   runexperiment_circuitsr   resultexperiment_indicesrR   resultsmetadatar   r6   
get_countssumvaluesreplacer   )rw   circuitsparameter_valuesrf   r{   is_shots_noneexperiment_managerivaluer   r   quasisr   r   kv
quasi_distcountsr}   s                      r   _callSampler._call   s    vt,""#3T:;.O;w3G43O0/1H7HA5zS!1!1!!455!,SZL 9114T5E5Ea5H1I0J"N 
 %%#C(8(8(;U$CD#'#<#<a=O#P &  8 ""22
.>>
 
 &(	 	 #66A &A ?#^^A.77E
.:G:M:M:OP:O$!!J<q)A-:OP
 j)$fnnUVFWF`F` ab**1-FMMO,%CI<<>R>413+QY6>R# %v~~VWGXGaGa bc% 7( V.. Q Ss   #J3"J9c                J   SSK Jn  SSKJn  / nU H  nU R                  R                  [        U5      5      nUb  UR                  U5        M=  UR                  [        U R                  5      5        [        U R                  5      U R                  [        U5      '   U R                  R                  U5        U R                  R                  UR                  5        M     U" U R                  Xb40 UD6n	[        U	S5      (       a  U	R                  OU	R                  " 5         U	$ )Nr   )List)PrimitiveJobsubmit)typingr   qiskit.primitives.primitive_jobr   rv   getrT   r   r   ro   rp   
parametersr   hasattrr   _submit)
rw   r   r   rf   r   r   circuit_indicesr7   r1   jobs
             r   _runSampler._run  s     	 @%'G%%)),w*?@E &&u-&&s4>>':;;>t~~;N!!,w"78%%g.  ''(:(:;   4::XKXsH--3;;	>A
r   c           	        [        U 5      n [        U 5      n[        [        U R                  5      5      [        UR                  5       5      :w  a3  [        SU R                   S[        UR                  5       5       S35      e[        S UR                  5        5       5      nU VVs/ s H  u  p4UPM	     nnnU R                  SS9n U R                  U5        U $ s  snnf )NzPSome classical bits are not used for measurements. The number of classical bits z, the used classical bits .c              3  ,   #    U  H
  u  pX!4v   M     g 7frO   r%   )rD   qcs      r   rF   .Sampler._preprocess_circuit.<locals>.<genexpr>*  s     D0CaV0Cs   F)inplace)r   r?   setr   r+   r   r   r5   r6   remove_final_measurementssave_probabilities_dict)r7   q_c_mappingc_q_mapping_r   r   s         r   _preprocess_circuitSampler._preprocess_circuit   s    w'/8uW''()S1C1C1E-FF0070B0B/C D++.{/A/A/C+D*EQH 
 D0A0A0CDD*+{tq{+33E3B''. ,s   (Cc                    U R                   R                  UR                  5        [        UU R                   40 U R                  D6nU$ rO   )rq   set_max_qubitsr   r   rs   )rw   r7   
transpileds      r   _transpile_circuitSampler._transpile_circuit0  sF    $$W%7%78MM
 %%


 r   c                <  ^  [        U5       Vs/ s H  o3U4T R                  ;  d  M  UPM     nnU(       aa  U 4S jU 5       nU(       a  U 4S jU 5       nT R                  (       d  U 4S jU 5       n[        XE5       H  u  p6UT R                  X24'   M     g g s  snf )Nc              3  B   >#    U  H  nTR                   U   v   M     g 7frO   )ro   )rD   r   rw   s     r   rF   %Sampler._transpile.<locals>.<genexpr>>  s     =9aq)9s   c              3  F   >#    U  H  nTR                  U5      v   M     g 7frO   )r   rD   circrw   s     r   rF   r   @  s     PxtD44T::x   !c              3  F   >#    U  H  nTR                  U5      v   M     g 7frO   )r   r   s     r   rF   r   B  s     OhdD33D99hr   )r   ru   rt   r   )rw   r   r   r   	to_handler   r7   s   `      r   r   Sampler._transpile9  s    ?+
+!=/AIbIb/bA+ 	 
 =9=HPxP++OhO!)6
@G))1*<= 7 
s
   BB)rq   rv   ro   rp   rt   rs   ru   )rd   dict | Nonere   r   rf   r   rg   bool)r   Sequence[int]r   Sequence[Sequence[float]]returnr   )r   zSequence[QuantumCircuit]r   r   )r7   r   )r   r   r   r   )__name__
__module____qualname____firstlineno____doc__rn   r   r   staticmethodr   r   r   __static_attributes____classcell__)rx   s   @r   rb   rb      s    0 (,)-#'#(! %! '	!
 !! !! !F8/8/ 48/
 
8/t* 44  H Hr   rb   c                  F    \ rS rSrS rS r\S 5       r      SS jrSr	g)	r   iG  c                J    / U l         / U l        / U l        / U l        SU l        g )Nr   )keysr   r   _input_indices_num_experimentrw   s    r   rn   _ExperimentManager.__init__H  s)    !	9; MO/1$%r   c                    U R                   $ rO   )r   r   s    r   __len___ExperimentManager.__len__O  s    ###r   c                r    [         R                  " [        U R                  / 5      5      R	                  5       $ )zindices of experiments)rP   argsortr   r   tolistr   s    r   r   %_ExperimentManager.experiment_indicesR  s)     zz#d11267>>@@r   c                   U(       a  XR                   ;   a}  U R                   R                  U5      nU R                  U   R                  5        H  u  pVUR	                  X%   5        M     U R
                  U   R	                  U R                  5        OU R                  R	                  U5        U R                   R	                  U5        U R                  R	                  UR                  5        VVs0 s H  u  pWXW/_M
     snn5        U R
                  R	                  U R                  /5        U =R                  S-  sl        gs  snnf )zappend experimentsr$   N)r   r1   r   r6   r   r   r   r   )rw   r)   r~   r   	key_indexr   vsr   s           r   r   _ExperimentManager.appendW  s     cYY.		,I--i8>>@		.+, A	*11$2F2FG$$++,>?IIS!  ''N<P<P<R(S<RDAC<R(ST&&(<(<'=>! )Ts   2E
)r   r   r   r   r   N)r)   ztuple[int, int]r~   z dict[ParameterExpression, float]r   r   )
r   r   r   r   rn   r   propertyr   r   r   r%   r   r   r   r   G  sC    &$ A A"" 9" +	"r   r   )r   zQuantumCircuit | Statevectorr   r   )r7   r   r   zdict[int, int])rL   ztuple[Qubit, ...]r7   r   r   rH   )T)r7   r   r_   r   r   rH   )$r   
__future__r   collections.abcr   r   warningsr   numpyrP   qiskit.circuitr   r   r	   'qiskit.circuit.library.data_preparationr
   qiskit.compilerr   qiskit.exceptionsr   qiskit.primitivesr   r   qiskit.quantum_infor   qiskit.resultr   r   r   r   r?   rM   rV   rT   rb   r   r%   r   r   <module>r      si    # .   E E > % ) : + + $$N!HqHm qHh"" ""r   