§
    ¹³Ùgå  ã                  óÚ   — d Z ddlmZ ddlmZ ddlmZ ddlZddl	m
Z
 ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZ ddlmZmZmZmZ  G d„ deee                  ¦  «        ZdS )z%
Sampler V1 reference implementation
é    )Úannotations)ÚSequence)ÚAnyN)ÚQuantumCircuit)ÚQiskitError)ÚStatevector©ÚQuasiDistribution)Údeprecate_funcé   )ÚBaseSamplerÚSamplerResult)ÚPrimitiveJob)Ú_circuit_keyÚbound_circuit_to_instructionÚfinal_measurement_mappingÚinit_circuitc                  óx   ‡ — e Zd ZdZ edd¬¦  «        ddœdˆ fd	„¦   «         Zdd„Zdd„Zedd„¦   «         Z	ˆ xZ
S )ÚSampleraã  
    Sampler V1 class.

    :class:`~Sampler` is a reference implementation of :class:`~BaseSampler` (V1).

    :Run Options:

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

        - **seed** (np.random.Generator or int) --
          Set a fixed seed or generator for the multinomial distribution. If shots is None, this
          option is ignored.
    z1.2z°All implementations of the `BaseSamplerV1` interface have been deprecated in favor of their V2 counterparts. The V2 alternative for the `Sampler` class is `StatevectorSampler`.)ÚsinceÚadditional_msgN©Úoptionsr   údict | Nonec               ó„   •— t          ¦   «                              |¬¦  «         g | _        g | _        g | _        i | _        dS )z�
        Args:
            options: Default options.

        Raises:
            QiskitError: if some classical bits are not used for measurements.
        r   N)ÚsuperÚ__init__Ú	_circuitsÚ_parametersÚ_qargs_listÚ_circuit_ids)Úselfr   Ú	__class__s     €úO/granary/edev/quantum/lib/python3.11/site-packages/qiskit/primitives/sampler.pyr   zSampler.__init__8   sE   ø€ õ 	‰Œ×Ò ÐÑ)Ô)Ð)ØˆŒØˆÔØˆÔØˆÔÐÐó    ÚcircuitsúSequence[int]Úparameter_valuesúSequence[Sequence[float]]Úreturnr   c                ó8  ‡— |                      dd ¦  «        Š|                      dd ¦  «        }|€t          j                             ¦   «         }nAt	          |t          j        j        ¦  «        r|}nt          j                             |¦  «        }d„ t          t          |¦  «        ¦  «        D ¦   «         }g }g }t          ||¦  «        D �]\  }	}
t          |
¦  «        t          | j	        |	         ¦  «        k    r;t          dt          |
¦  «        › dt          | j	        |	         ¦  «        › d�¦  «        ‚|                     t          |
¦  «        dk    r| j        |	         nE| j        |	                              t          t          | j	        |	         |
¦  «        ¦  «        ¦  «        ¦  «         |                     | j        |	         ¦  «         �Œd„ t          ||¦  «        D ¦   «         }‰�‘t!          |¦  «        D ]w\  }	}|                     ‰t          j        |                     ¦   «         t(          ¬	¦  «        ¦  «        }ˆfd
„t          |                     ¦   «         |¦  «        D ¦   «         ||	<   Œx|D ]}‰|d<   Œˆfd„|D ¦   «         }t-          ||¦  «        S )NÚshotsÚseedc                ó   — g | ]}i ‘ŒS © r/   )Ú.0Ú_s     r$   ú
<listcomp>z!Sampler._call.<locals>.<listcomp>\   s   € Ð)KÐ)KÐ)K°¨"Ð)KÐ)KÐ)Kr%   zThe number of values (z+) does not match the number of parameters (ú).r   c                óv   — g | ]6\  }}t          t          |¦  «        ¦  «                             |d ¬¦  «        ‘Œ7S )é   )ÚqargsÚdecimals)r   r   Úprobabilities_dict)r0   Úcircr6   s      r$   r2   z!Sampler._call.<locals>.<listcomp>l   sZ   € ð 
ð 
ð 
ñ ��eõ Õ4°TÑ:Ô:Ñ;Ô;×NÒNØ bð Oñ ô ð
ð 
ð 
r%   )Údtypec                ó.   •— i | ]\  }}|d k    ¯||‰z  “ŒS )r   r/   )r0   ÚkeyÚcountr,   s      €r$   ú
<dictcomp>z!Sampler._call.<locals>.<dictcomp>u   s6   ø€ ð $ð $ð $Ù+5¨3°ÐZ_ÐbcÒZcÐZc�C˜ ™ÐZcÐZcÐZcr%   c                ó2   •— g | ]}t          |‰¬ ¦  «        ‘ŒS ))r,   r	   )r0   Úpr,   s     €r$   r2   z!Sampler._call.<locals>.<listcomp>z   s'   ø€ ÐKÐKÐK¸Õ# A¨UÐ3Ñ3Ô3ÐKÐKÐKr%   )ÚpopÚnpÚrandomÚdefault_rngÚ
isinstanceÚ	GeneratorÚrangeÚlenÚzipr   r   Úappendr   Úassign_parametersÚdictr    Ú	enumerateÚmultinomialÚfromiterÚvaluesÚfloatÚkeysr   )r"   r&   r(   Úrun_optionsr-   ÚrngÚmetadataÚbound_circuitsÚ
qargs_listÚiÚvalueÚprobabilitiesÚ	prob_dictÚcountsÚ	metadatumÚquasisr,   s                   @r$   Ú_callzSampler._callL   sÊ  ø€ ð —’ ¨Ñ.Ô.ˆØ�Š˜v tÑ,Ô,ˆØˆ<Ý”)×'Ò'Ñ)Ô)ˆCˆCÝ˜�bœiÔ1Ñ2Ô2ð 	.ØˆCˆCå”)×'Ò'¨Ñ-Ô-ˆCð *LÐ)Kµe½CÀ¹M¼MÑ6JÔ6JÐ)KÑ)KÔ)KˆàˆØˆ
Ý˜HÐ&6Ñ7Ô7ð 	3ñ 	3‰HˆAˆuÝ�5‰zŒz�S Ô!1°!Ô!4Ñ5Ô5Ò5Ð5Ý!ðN­S°©Z¬Zð Nð NÝ14°TÔ5EÀaÔ5HÑ1IÔ1IðNð Nð Nñô ð ð ×!Ò!å�u‘:”: ’?�?ð ”˜qÔ!Ð!à”^ AÔ&×8Ò8½½cÀ$ÔBRÐSTÔBUÐW\Ñ>]Ô>]Ñ9^Ô9^Ñ_Ô_ñô ð ð
 ×Ò˜dÔ.¨qÔ1Ñ2Ô2Ð2Ñ2ð
ð 
õ  # >°:Ñ>Ô>ð	
ñ 
ô 
ˆð ÐÝ )¨-Ñ 8Ô 8ð ð ‘��9ØŸš¨µ´¸I×<LÒ<LÑ<NÔ<NÕV[Ð0\Ñ0\Ô0\Ñ]Ô]�ð$ð $ð $ð $Ý9<¸Y¿^º^Ñ=MÔ=MÈvÑ9VÔ9Vð$ñ $ô $�˜aÑ Ð ð &ð +ð +�	Ø%*�	˜'Ñ"Ð"ØKÐKÐKÐK¸]ÐKÑKÔKˆå˜V XÑ.Ô.Ð.r%   útuple[QuantumCircuit, ...]útuple[tuple[float, ...], ...]c                óB  — g }|D ]ñ}t          |¦  «        }| j                             |¦  «        }|�|                     |¦  «         ŒC|                     t	          | j        ¦  «        ¦  «         t	          | j        ¦  «        | j        |<   |                      |¦  «        \  }}| j                             |¦  «         | j                             |¦  «         | j                             |j	        ¦  «         Œòt          | j        ||fi |¤Ž}	|	                     ¦   «          |	S ©N)r   r!   ÚgetrJ   rH   r   Ú_preprocess_circuitr    r   Ú
parametersr   r_   Ú_submit)
r"   r&   r(   rS   Úcircuit_indicesÚcircuitr<   Úindexr6   Újobs
             r$   Ú_runzSampler._run~   s  € ð ˆØð 	<ð 	<ˆGÝ˜wÑ'Ô'ˆCØÔ%×)Ò)¨#Ñ.Ô.ˆEØÐ Ø×&Ò& uÑ-Ô-Ð-Ð-à×&Ò&¥s¨4¬>Ñ':Ô':Ñ;Ô;Ð;Ý),¨T¬^Ñ)<Ô)<�Ô! #Ñ&Ø!%×!9Ò!9¸'Ñ!BÔ!B‘�˜Ø”×%Ò% gÑ.Ô.Ð.ØÔ ×'Ò'¨Ñ.Ô.Ð.ØÔ ×'Ò'¨Ô(:Ñ;Ô;Ð;Ð;Ý˜4œ: Ð8HÐXÐXÈKÐXÐXˆØ�Š‰ŒˆØˆ
r%   ri   r   c           	     óÜ  — t          | ¦  «        } t          | ¦  «        }t          t          | j        ¦  «        ¦  «        t          |                     ¦   «         ¦  «        k    r:t          d| j        › dt          |                     ¦   «         ¦  «        › d�¦  «        ‚t          d„ |                     ¦   «         D ¦   «         ¦  «        }d„ |D ¦   «         }|  	                    d¬¦  «        } | |fS )NzQSome classical bits are not used for measurements. the number of classical bits (z), the used classical bits (r3   c              3  ó$   K  — | ]\  }}||fV — Œd S rc   r/   )r0   ÚqÚcs      r$   ú	<genexpr>z.Sampler._preprocess_circuit.<locals>.<genexpr>Ÿ   s*   è è € ÐDÐD©¨¨1˜a ˜VÐDÐDÐDÐDÐDÐDr%   c                ó   — g | ]\  }}|‘ŒS r/   r/   )r0   r1   ro   s      r$   r2   z/Sampler._preprocess_circuit.<locals>.<listcomp>    s   € Ð+Ð+Ð+‘t�q˜!�Ð+Ð+Ð+r%   F)Úinplace)
r   r   ÚsetrG   Ú
num_clbitsrP   r   ÚsortedÚitemsÚremove_final_measurements)ri   Úq_c_mappingÚc_q_mappingr6   s       r$   re   zSampler._preprocess_circuit•   sþ   € å˜wÑ'Ô'ˆÝ/°Ñ8Ô8ˆÝ�u�WÔ'Ñ(Ô(Ñ)Ô)­S°×1CÒ1CÑ1EÔ1EÑ-FÔ-FÒFÐFÝðKØ29Ô2DðKð Kå-0°×1CÒ1CÑ1EÔ1EÑ-FÔ-FðKð Kð Kñô ð õ
 ÐDÐD°×0AÒ0AÑ0CÔ0CÐDÑDÔDÑDÔDˆØ+Ð+˜{Ð+Ñ+Ô+ˆØ×3Ò3¸EÐ3ÑBÔBˆØ˜ˆ~Ðr%   )r   r   )r&   r'   r(   r)   r*   r   )r&   r`   r(   ra   )ri   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r_   rl   Ústaticmethodre   Ú__classcell__)r#   s   @r$   r   r   '   sÈ   ø€ € € € € ðð ð  €^ØðNðñ ô ð 26ð ð ð ð ð ð ð ñô ðð0/ð 0/ð 0/ð 0/ðdð ð ð ð. ðð ð ñ „\ðð ð ð ð r%   r   )r~   Ú
__future__r   Úcollections.abcr   Útypingr   ÚnumpyrB   Úqiskit.circuitr   Úqiskit.exceptionsr   Úqiskit.quantum_infor   Úqiskit.resultr
   Úqiskit.utils.deprecationr   Úbaser   r   Úprimitive_jobr   Úutilsr   r   r   r   r   r/   r%   r$   ú<module>r�      s[  ððð ð #Ð "Ð "Ð "Ð "Ð "à $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð à Ð Ð Ð à )Ð )Ð )Ð )Ð )Ð )Ø )Ð )Ð )Ð )Ð )Ð )Ø +Ð +Ð +Ð +Ð +Ð +Ø +Ð +Ð +Ð +Ð +Ð +Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3à ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'ðð ð ð ð ð ð ð ð ð ð ð ð{ð {ð {ð {ð {ˆk˜, }Ô5Ô6ñ {ô {ð {ð {ð {r%   