§
    ¹³Ùgx=  ã                  ó  — d Z ddlmZ ddlmZmZmZ ddlmZ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 d	d
lmZmZmZ ddgZeeef         Z	 eeeeedf         f         ef         Z	  G d„ de¦  «        Zd d„Zd!d„Zd"d„Zd#d„Z dS )$z
Bindings array class
é    )Úannotations)ÚMappingÚUnionÚTuple)ÚIterabler   )ÚchainÚisliceN)Ú	ArrayLike)Ú	ParameterÚQuantumCircuité   )ÚShapedMixinÚ
ShapeInputÚshape_tupleÚParameterLikeÚBindingsArrayLike.c                  ó°   ‡ — e Zd ZdZ	 	 d d!ˆ fd„Zd"d	„Zd
„ Zed#d„¦   «         Zed$d„¦   «         Z	d%d&d„Z
d'd„Zd(d„Zd"d„Zd)d„Zed*d„¦   «         Zd„ Zˆ xZS )+ÚBindingsArrayaf  Stores parameter binding value sets for a :class:`qiskit.QuantumCircuit`.

    A single parameter binding set provides numeric values to bind to a circuit with free
    :class:`qiskit.circuit.Parameter`\s. An instance of this class stores an array-valued collection
    of such sets. The simplest example is a 0-d array consisting of a single parameter binding set,
    whereas an n-d array of parameter binding sets represents an n-d sweep over values.

    The storage format is a dictionary of arrays attached to parameters,
    ``{params_0: values_0,...}``. A convention is used where the last dimension of each array
    indexes (a subset of) circuit parameters. For example, if the last dimension of ``values_0`` is
    25, then it represents an array of possible binding values for the 25 distinct parameters
    ``params_0``, where its leading shape is the array :attr:`~.shape` of its binding array. This
    allows flexibility about whether values for different parameters are stored in one big array, or
    across several smaller arrays.

    .. code-block:: python

        # 0-d array (i.e. only one binding)
        BindingsArray({"a": 4, ("b", "c"): [5, 6]})

        # single array, last index is parameters
        parameters = tuple(f"a{idx}" for idx in range(100))
        BindingsArray({parameters: np.ones((10, 10, 100))})

        # multiple arrays, where each last index is parameters. notice that it's smart enough to
        # figure out that a missing last dimension corresponds to a single parameter.
        BindingsArray(
            {("c", "a"): np.zeros((10, 10, 2)), "b": np.ones((10, 10))}
        )
    NÚdataúBindingsArrayLike | NoneÚshapeúShapeInput | Nonec                ó,  •— t          ¦   «                              ¦   «          |€i | _        n#d„ |                     ¦   «         D ¦   «         | _        |€t	          | j        ¦  «        nt          |¦  «        | _        d| _        |                      ¦   «          dS )a  
        Initialize a :class:`~.BindingsArray`.

        The ``shape`` argument does not need to be provided whenever it can unambiguously
        be inferred from the provided arrays. Ambiguity arises whenever the key of an entry of
        ``data`` contains only one parameter and the corresponding array's shape ends in a one.
        In this case, it can't be decided whether that one is an index over parameters, or whether
        it should be incorporated in :attr:`~shape`.

        Since :class:`~.Parameter` objects are only allowed to represent float values, this
        class casts all given values to float. If an incompatible dtype is given, such as complex
        numbers, a ``TypeError`` will be raised.

        Args:
            data: A mapping from one or more parameters to arrays of values to bind
                them to, where the last axis is over parameters.
            shape: The leading shape of every array in these bindings.

        Raises:
            ValueError: If all inputs are ``None``.
            ValueError: If the shape cannot be automatically inferred from the arrays, or if there
                is some inconsistency in the shape of the given arrays.
            TypeError: If some of the vaules can't be cast to a float type.
        Nc                ó¾   — i | ]Z\  }}t          |t          t          f¦  «        rt          |f¦  «        nt          |¦  «        t	          j        |t          ¬ ¦  «        “Œ[S )©Údtype)Ú
isinstancer   ÚstrÚ_format_keyÚnpÚasarrayÚfloat)Ú.0ÚkeyÚvals      úa/granary/edev/quantum/lib/python3.11/site-packages/qiskit/primitives/containers/bindings_array.pyú
<dictcomp>z*BindingsArray.__init__.<locals>.<dictcomp>x   sm   € ð ð ð ñ �C˜õ ,6°c½IÅsÐ;KÑ+LÔ+LÐb•K  Ñ'Ô'Ð'ÕR]Ð^aÑRbÔRbÝ”:˜c­Ð/Ñ/Ô/ðð ð ó    )	ÚsuperÚ__init__Ú_dataÚitemsÚ_infer_shaper   Ú_shapeÚ_num_parametersÚvalidate)Úselfr   r   Ú	__class__s      €r&   r*   zBindingsArray.__init__V   s‘   ø€ õ: 	‰Œ×ÒÑÔÐàˆ<ØˆDŒJˆJðð ð !%§
¢
¡¤ð	ñ ô ˆDŒJð 38°-•l 4¤:Ñ.Ô.Ð.Å[ÐQVÑEWÔEWˆŒØ#ˆÔà�Š‰Œˆˆˆr(   Úreturnc                ó  ‡— ˆfd„| j                              ¦   «         D ¦   «         }	 t          t          |                     ¦   «         ¦  «        ¦  «        j        d d…         }n# t          $ r d}Y nw xY wt          ||¦  «        S )Nc                ó(   •— i | ]\  }}||‰         “ŒS © r6   )r#   Úparamsr%   Úargss      €r&   r'   z-BindingsArray.__getitem__.<locals>.<dictcomp>Š   s#   ø€ ÐHÐHÐH¡k f¨c�˜˜Dœ	ÐHÐHÐHr(   éÿÿÿÿr6   )r+   r,   ÚnextÚiterÚvaluesr   ÚStopIterationr   )r1   r8   r   r   s    `  r&   Ú__getitem__zBindingsArray.__getitem__„   s‘   ø€ ð IÐHÐHÐH°T´Z×5EÒ5EÑ5GÔ5GÐHÑHÔHˆð	Ý�˜dŸkšk™mœmÑ,Ô,Ñ-Ô-Ô3°C°R°CÔ8ˆEˆEøÝð 	ð 	ð 	ØˆEˆEˆEð	øøøå˜T 5Ñ)Ô)Ð)s   ¨;A$ Á$A3Á2A3c                óø  — d| j         › �d| j        › �g}| j        r³t          t          t	          t
          t          j        t	          t          | j	        ¦  «        ¦  «        ¦  «        d¦  «        ¦  «        }t          |¦  «        | j        k     r|                     d¦  «         |                     dd                     |¦  «        › d�¦  «         t          | ¦  «        j        › dd                     |¦  «        › d	�S )
Nzshape=znum_parameters=é   z...zparameters=[z, ú]z(<z>))r   Únum_parametersÚlistr	   ÚmapÚreprr   Úfrom_iterabler   r+   ÚlenÚappendÚjoinÚtypeÚ__name__)r1   ÚdescriptionsÚnamess      r&   Ú__repr__zBindingsArray.__repr__‘   så   € Ø- ¤Ð-Ð-Ð/VÀÔATÐ/VÐ/VÐWˆØÔð 	DÝ�¥¥D­%Ô*=½cÅ+ÈtÌzÑ>ZÔ>ZÑ*[Ô*[Ñ \Ô \Ð^_Ñ`Ô`ÑaÔaˆEÝ�5‰zŒz˜DÔ/Ò/Ð/Ø—’˜UÑ#Ô#Ð#Ø×ÒÐ B¨t¯yªy¸Ñ/?Ô/?Ð BÐ BÐ BÑCÔCÐCÝ�t‘*”*Ô%ÐDÐD¨¯ª°<Ñ)@Ô)@ÐDÐDÐDÐDr(   ú!dict[tuple[str, ...], np.ndarray]c                ó   — | j         S )z!The keyword values of this array.)r+   ©r1   s    r&   r   zBindingsArray.dataš   s   € ð ŒzÐr(   Úintc                óˆ   — | j         €5t          d„ | j                             ¦   «         D ¦   «         ¦  «        | _         | j         S )zThe total number of parameters.Nc              3  ó0   K  — | ]}|j         d          V — ŒdS ©r9   N©r   )r#   r%   s     r&   ú	<genexpr>z/BindingsArray.num_parameters.<locals>.<genexpr>£   s(   è è € Ð&TÐ&T¸ s¤y°¤}Ð&TÐ&TÐ&TÐ&TÐ&TÐ&Tr(   )r/   Úsumr+   r<   rQ   s    r&   rB   zBindingsArray.num_parametersŸ   sC   € ð ÔÐ'Ý#&Ð&TÐ&TÀÄ
×@QÒ@QÑ@SÔ@SÐ&TÑ&TÔ&TÑ#TÔ#TˆDÔ ØÔ#Ð#r(   Ú
parametersúIterable[ParameterLike] | Noneú
np.ndarrayc           	     óÆ  ‡	‡
— dŠ
t          j        t          | j        | j        ¦  «        ¦  «        }|€;| j                             ¦   «         D ] }|j        d         }||d‰
‰
|z   …f<   ‰
|z  Š
Œ!nót          |¦  «        }t          |¦  «        | j        k    r(t          d| j        › dt          |¦  «        › d�¦  «        ‚d„ t          |¦  «        D ¦   «         Š	| j                             ¦   «         D ]q\  }}	 ˆ	ˆ
fd	„|D ¦   «         }nT# t          $ rG}t          ˆ	fd
„t          t          |¦  «        D ¦   «         ¦  «        }t          d|› d�¦  «        |‚d}~ww xY w||d|f<   Œr|S )aÇ  Return the contents of this bindings array as a single NumPy array.

        The parameters are indexed along the last dimension of the returned array.

        Parameters:
            parameters: Optional parameters that determine the order of the output.

        Returns:
            This bindings array as a single NumPy array.

        Raises:
            ValueError: If ``parameters`` are provided, but do not match those found in ``data``.
        r   Nr9   .ú	Expected z parameters but z
 received.c                ó4   — i | ]\  }}t          |¦  «        |“ŒS r6   ©Ú_param_name)r#   ÚidxÚ	parameters      r&   r'   z*BindingsArray.as_array.<locals>.<dictcomp>É   s&   € ÐbÐbÐb¹.¸#¸y�+ iÑ0Ô0°#ÐbÐbÐbr(   c                ó@   •— g | ]}‰t          |¦  «                 ‰z   ‘ŒS r6   r_   )r#   ÚparamÚ
idx_lookupÚpositions     €€r&   ú
<listcomp>z*BindingsArray.as_array.<locals>.<listcomp>Ì   s+   ø€ Ð^Ð^Ð^È%˜J¥{°5Ñ'9Ô'9Ô:¸XÑEÐ^Ð^Ð^r(   c              3  ó$   •K  — | ]
}|‰v¯|V — Œd S ©Nr6   )r#   Úpre   s     €r&   rW   z)BindingsArray.as_array.<locals>.<genexpr>Î   s.   øè è € Ð"bÐ"b¨ÈaÐWaÐNaÐNa 1ÐNaÐNaÐNaÐNaÐ"bÐ"br(   z(Could not find placement for parameter 'z'.)r    Úemptyr   r   rB   r   r<   rC   rG   Ú
ValueErrorÚ	enumerater,   ÚKeyErrorr:   rD   r`   )r1   rY   ÚretÚarrÚsizeÚ
arr_paramsÚidxsÚexÚmissingre   rf   s            @@r&   Úas_arrayzBindingsArray.as_array¦   sº  øø€ ð ˆÝŒh•{ 4¤:¨tÔ/BÑCÔCÑDÔDˆàÐà”y×'Ò'Ñ)Ô)ð !ð !�Ø”y ”}�Ø7:��C˜ H¨t¡OÐ3Ð3Ñ4Ø˜DÑ ��ð!õ ˜jÑ)Ô)ˆJÝ�:‰Œ $Ô"5Ò5Ð5Ý Ø` Ô 3Ð`Ð`ÅSÈÁ_Ä_Ð`Ð`Ð`ñô ð ð cÐbÍIÐV`ÑLaÔLaÐbÑbÔbˆJØ#'¤9§?¢?Ñ#4Ô#4ð %ð %‘�
˜CðeØ^Ð^Ð^Ð^Ð^ÐS]Ð^Ñ^Ô^�D�DøÝð eð eð eÝ"Ð"bÐ"bÐ"bÐ"b­cµ+¸zÑ.JÔ.JÐ"bÑ"bÔ"bÑbÔb�GÝ$Ð%[ÐPWÐ%[Ð%[Ð%[Ñ\Ô\ÐbdÐdøøøøðeøøøð "%��C˜�I‘�àˆ
s   Ã5DÄ
EÄAEÅEÚcircuitr   Úlocútuple[int, ...]c                óÞ   ‡— t          ‰¦  «        | j        k    rt          d‰› d| j        › d�¦  «        ‚ˆfd„| j                             ¦   «         D ¦   «         }|                     |¦  «        S )a[  Return a new circuit bound to the values at the provided index.

        Args:
            circuit: The circuit to bind.
            loc: A tuple of indices, on for each dimension of this array.

        Returns:
            The bound circuit.

        Raises:
            ValueError: If the index doesn't have the right number of values.
        r]   z to index all dimensions of ú.c                óT   •— i | ]$\  }}t          ||‰         ¦  «        D ]\  }}||“Œ	Œ%S r6   )Úzip)r#   r7   Úvalsrd   r%   rx   s        €r&   r'   z&BindingsArray.bind.<locals>.<dictcomp>ä   sX   ø€ ð 
ð 
ð 
á�˜Ý! &¨$¨s¬)Ñ4Ô4ð
ð 
ñ ��sð �3ð
ð 
ð 
ð 
r(   )rG   Úndimrl   r   r+   r,   Úassign_parameters)r1   rw   rx   rY   s     ` r&   ÚbindzBindingsArray.bindÔ   sˆ   ø€ õ ˆs‰8Œ8�t”yÒ Ð ÝÐW¨ÐWÐWÈ$Ì*ÐWÐWÐWÑXÔXÐXð
ð 
ð 
ð 
à $¤
× 0Ò 0Ñ 2Ô 2ð
ñ 
ô 
ˆ
ð
 ×(Ò(¨Ñ4Ô4Ð4r(   c                ó°   — t          j        | j        t          ¬¦  «        }t          j        | j        ¦  «        D ]}|                      ||¦  «        ||<   Œ|S )zÞReturn an object array of bound circuits with the same shape.

        Args:
            circuit: The circuit to bind.

        Returns:
            An object array of the same shape containing all bound circuits.
        r   )r    rk   r   ÚobjectÚndindexr�   )r1   rw   rp   ra   s       r&   Úbind_allzBindingsArray.bind_allë   sS   € õ Œh�t”z­Ð0Ñ0Ô0ˆÝ”:˜dœjÑ)Ô)ð 	/ð 	/ˆCØ—y’y ¨#Ñ.Ô.ˆC�‰HˆHØˆ
r(   c                ó6   — |                       | j        ¦  «        S )a	  Return a new :class:`~BindingsArray` with one dimension.

        The returned bindings array has a :attr:`shape` given by ``(size, )``, where the size is the
        :attr:`~size` of this bindings array.

        Returns:
            A new bindings array.
        )Úreshaperq   rQ   s    r&   ÚravelzBindingsArray.ravelù   s   € ð �|Š|˜DœIÑ&Ô&Ð&r(   úint | Iterable[int]c                ó¼  ‡‡— t          ‰¦  «        Št          d„ ‰D ¦   «         ¦  «        rJt          j        d„ ‰D ¦   «         t          ¬¦  «        }| j        |z  Št          ˆfd„‰D ¦   «         ¦  «        Št          j        ‰t          ¬¦  «        | j        k    rt          d¦  «        ‚ˆfd„| j         	                    ¦   «         D ¦   «         }t          |‰¬¦  «        S )ak  Return a new :class:`~BindingsArray` with a different shape.

        This results in a new view of the same arrays.

        Args:
            shape: The shape of the returned bindings array.

        Returns:
            A new bindings array.

        Raises:
            ValueError: If the provided shape has a different product than the current size.
        c              3  ó"   K  — | ]
}|d k     V — ŒdS ©r   Nr6   ©r#   Údims     r&   rW   z(BindingsArray.reshape.<locals>.<genexpr>  s&   è è € Ð(Ð(˜3ˆs�QŠwÐ(Ð(Ð(Ð(Ð(Ð(r(   c                ó   — g | ]
}|d k    ¯|‘ŒS )r   r6   r�   s     r&   rg   z)BindingsArray.reshape.<locals>.<listcomp>  s   € Ð$FÐ$FÐ$F¨S¸SÀAºX¸X S¸X¸X¸Xr(   r   c              3  ó,   •K  — | ]}|d k    r|n‰V — ŒdS rŒ   r6   )r#   rŽ   Úmissing_dims     €r&   rW   z(BindingsArray.reshape.<locals>.<genexpr>  s/   øè è € ÐLÐL¸s ¨¢ ˜#˜#¨{ÐLÐLÐLÐLÐLÐLr(   z5Reshaping cannot change the total number of elements.c           	     ób   •— i | ]+\  }}||                      ‰|j        d d…         z   ¦  «        “Œ,S rU   )r‡   r   )r#   Úpsr%   r   s      €r&   r'   z)BindingsArray.reshape.<locals>.<dictcomp>  s:   ø€ ÐZÐZÐZ¹G¸BÀ��C—K’K ¨¬	°"°#°#¬Ñ 6Ñ7Ô7ÐZÐZÐZr(   rV   )r   Úanyr    ÚprodrR   rq   Útuplerl   r+   r,   r   )r1   r   Úpositive_sizer   r‘   s    `  @r&   r‡   zBindingsArray.reshape  sé   øø€ õ ˜EÑ"Ô"ˆÝÐ(Ð( %Ð(Ñ(Ô(Ñ(Ô(ð 	MåœGÐ$FÐ$F°EÐ$FÑ$FÔ$FÍcÐRÑRÔRˆMØœ) }Ñ4ˆKÝÐLÐLÐLÐLÀeÐLÑLÔLÑLÔLˆEåŒ7�5¥Ð$Ñ$Ô$¨¬	Ò1Ð1ÝÐTÑUÔUÐUàZÐZÐZÐZÀtÄz×GWÒGWÑGYÔGYÐZÑZÔZˆÝ˜T¨Ð/Ñ/Ô/Ð/r(   Úbindings_arrayr   c                óÒ   — |€ | ¦   «         }nYt          |t          ¦  «        r | |¬¦  «        }n7t          |t          ¦  «        r|S t          dt	          |¦  «        › d�¦  «        ‚|S )zßCoerce an input that is :class:`~BindingsArrayLike` into a new :class:`~BindingsArray`.

        Args:
            bindings_array: An object to be bindings array.

        Returns:
            A new bindings array.
        N)r   zUnsupported type z
 is given.)r   Ú_Mappingr   Ú	TypeErrorrJ   )Úclsr˜   s     r&   ÚcoercezBindingsArray.coerce  s   € ð Ð!Ø ˜S™UœUˆNˆNÝ˜­Ñ1Ô1ð 	RØ ˜S nÐ5Ñ5Ô5ˆNˆNÝ˜­Ñ6Ô6ð 	RØ!Ð!åÐPµ°^Ñ0DÔ0DÐPÐPÐPÑQÔQÐQØÐr(   c                óè   — | j                              ¦   «         D ]W\  }}t          || j        ¦  «        x}| j         |<   t	          |¦  «        |j        d         k    rt          d|› d|› �¦  «        ‚ŒXdS )z+Validate the consistency in bindings_array.r9   z
Length of z% inconsistent with last dimension of N)r+   r,   Ú_standardize_shaper.   rG   r   rl   )r1   rY   r%   s      r&   r0   zBindingsArray.validate3  sŒ   € à#œz×/Ò/Ñ1Ô1ð 	ð 	‰OˆJ˜Ý+=¸cÀ4Ä;Ñ+OÔ+OÐOˆC�$”*˜ZÑ(Ý�:‰Œ #¤)¨B¤-Ò/Ð/Ý ØW ÐWÐWÐRUÐWÐWñô ð ð 0ð	ð 	r(   )NN)r   r   r   r   )r3   r   )r3   rO   )r3   rR   ri   )rY   rZ   r3   r[   )rw   r   rx   ry   r3   r   )rw   r   r3   r[   )r   r‰   r3   r   )r˜   r   r3   r   )rK   Ú
__module__Ú__qualname__Ú__doc__r*   r>   rN   Úpropertyr   rB   rv   r�   r…   rˆ   r‡   Úclassmethodr�   r0   Ú__classcell__)r2   s   @r&   r   r   6   sU  ø€ € € € € ðð ðB *.Ø#'ð,ð ,ð ,ð ,ð ,ð ,ð ,ð\*ð *ð *ð *ðEð Eð Eð ðð ð ñ „Xðð ð$ð $ð $ñ „Xð$ð,ð ,ð ,ð ,ð ,ð\5ð 5ð 5ð 5ð.ð ð ð ð	'ð 	'ð 	'ð 	'ð0ð 0ð 0ð 0ð6 ðð ð ñ „[ðð&ð ð ð ð ð ð r(   r   r%   r[   r   ry   r3   c                ó¾   — | j         |k    r	| d         } nH| j        dz
  t          |¦  «        k    s| j         dd…         |k    rt          d| j         › d|› �¦  «        ‚| S )au  Return ``val`` or ``val[..., None]``.

    Args:
        val: The array whose shape to standardize.
        shape: The shape to standardize to.

    Returns:
        An array with one more dimension than ``len(shape)``, and whose leading dimensions match
        ``shape``.

    Raises:
        ValueError: If the leading shape of ``val`` does not match the ``shape``.
    ).Nr   Nr9   zArray with shape z inconsistent with )r   r   rG   rl   )r%   r   s     r&   rŸ   rŸ   =  sm   € ð „y�EÒÐØ�)ŒnˆˆØ	Œ�A‰�˜U™œÒ	#Ð	# s¤y°°"°¤~¸Ò'>Ð'>ÝÐR¨S¬YÐRÐRÈ5ÐRÐRÑSÔSÐSØ€Jr(   r   ú'dict[tuple[Parameter, ...], np.ndarray]c                óð  ‡— dŠˆfd„}|                       ¦   «         D ]r\  }}t          |¦  «        dk    r ||j        dd…         ¦  «         Œ1|j        r*|j        d         dk    r ||j        dd…         ¦  «         Œb ||j        ¦  «         Œs‰€dS t          ‰¦  «        dk    rt          t	          ‰¦  «        ¦  «        S t          ‰¦  «        dk    rt          d¦  «        ‚t          d‰› d	�¦  «        ‚)
a˜  Return a shape tuple that consistently defines the leading dimensions of all arrays.

    Args:
        data: A mapping from tuples to arrays, where the length of each tuple should match the
            last dimension of the corresponding array.

    Returns:
        A shape tuple that matches the leading dimension of every array.

    Raises:
        ValueError: If this cannot be done unambiguously.
    Nc                 óX   •— ‰€t          | ¦  «        Šd S ‰                     | ¦  «         d S ri   )ÚsetÚintersection_update)Úpossible_shapesÚonly_possible_shapess    €r&   Úexamine_arrayz#_infer_shape.<locals>.examine_arraya  s7   ø€ àÐ'Ý#& Ñ#7Ô#7Ð Ð Ð à ×4Ò4°_ÑEÔEÐEÐEÐEr(   r   r9   r6   r   z$Could not find any consistent shape.zDCould not unambiguously determine the intended shape, all shapes in z7 are consistent with the input; specify shape manually.)r,   rG   r   r:   r;   rl   )r   r®   rY   r%   r­   s       @r&   r-   r-   R  sJ  ø€ ð  ÐðFð Fð Fð Fð Fð  Ÿ:š:™<œ<ð 
%ð 
%‰ˆ
�CÝˆz‰?Œ?˜aÒÐàˆM˜#œ) C R Cœ.Ñ)Ô)Ð)Ð)ØŒYð 	%˜3œ9 Rœ=¨AÒ-Ð-ð ˆM˜#œ) C R Cœ.Ñ)Ô)Ð)Ð)ð ˆM˜#œ)Ñ$Ô$Ð$Ð$àÐ#ØˆrÝ
ÐÑ Ô  AÒ%Ð%Ý•DÐ-Ñ.Ô.Ñ/Ô/Ð/Ý	Ð!Ñ	"Ô	" aÒ	'Ð	'ÝÐ?Ñ@Ô@Ð@Ý
ð	YØð	Yð 	Yð 	Yñô ð r(   r$   útuple[Parameter | str, ...]c                óF   — t          t          t          | ¦  «        ¦  «        S ri   )r–   rD   r`   )r$   s    r&   r   r   €  s   € Ý••[ #Ñ&Ô&Ñ'Ô'Ð'r(   rd   úParameter | strr   c                ó>   — t          | t          ¦  «        r| j        n| S ri   )r   r   Úname)rd   s    r&   r`   r`   „  s   € Ý# E­9Ñ5Ô5Ð@ˆ5Œ:ˆ:¸5Ð@r(   )r%   r[   r   ry   r3   r[   )r   r§   r3   ry   )r$   r¯   )rd   r±   r3   r   )!r¢   Ú
__future__r   Útypingr   r   r   Úcollections.abcr   rš   Ú	itertoolsr   r	   Únumpyr    Únumpy.typingr
   Úqiskit.circuitr   r   r   r   r   r   Ú__all__r   r   r   r   rŸ   r-   r   r`   r6   r(   r&   ú<module>r¼      s¢  ððð ð #Ð "Ð "Ð "Ð "Ð "à (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #à Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "à 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4à 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7ð Ð/Ð
0€ð �i �nÔ%€Ø $à˜E -°°}ÀcÐ7IÔ1JÐ"JÔKÈYÐVÔWÐ ðð"Dð Dð Dð Dð D�Kñ Dô Dð DðNð ð ð ð*+ð +ð +ð +ð\(ð (ð (ð (ðAð Að Að Að Að Ar(   