§
    ¹³Ùg6  ã                  ó~   — d Z ddlmZ ddlmZmZmZmZmZ ddl	Z
ddlmZmZmZ dd„Z G d„ de¦  «        Z	 ddd„ZdS )z,
Dataclass tools for data namespaces (bins)
é    )Úannotations)ÚAnyÚ	ItemsViewÚIterableÚKeysViewÚ
ValuesViewNé   )ÚShapedMixinÚ
ShapeInputÚshape_tupleÚvaluer   ÚreturnÚstrc                óz   — t          | t          j        ¦  «        rd| j        › d| j        › d�S t          | ¦  «        S )z-Helper function for :meth:`DataBin.__repr__`.znp.ndarray(<shape=z, dtype=z>))Ú
isinstanceÚnpÚndarrayÚshapeÚdtypeÚrepr)r   s    ú[/granary/edev/quantum/lib/python3.11/site-packages/qiskit/primitives/containers/data_bin.pyÚ_value_reprr      s@   € å�%�œÑ$Ô$ð IØH E¤KÐHÐH¸¼ÐHÐHÐHÐHÝ�‰;Œ;Ðó    c                  óÒ   ‡ — e Zd ZdZdZ eh d£¦  «        Zddœd!ˆ fd„Zd	„ Zd
„ Z	d„ Z
d"d„Zd#d„Zd$d„Zd%d„Zd&d„Zd'd„Zed(d„¦   «         Zed)d„¦   «         Zed*d „¦   «         Zˆ xZS )+ÚDataBinaÊ  Namespace for storing data.

    .. code-block:: python

        import numpy as np
        from qiskit.primitives import DataBin, BitArray

        data = DataBin(
            alpha=BitArray.from_samples(["0010"]),
            beta=np.array([1.2])
        )

        print("alpha data:", data.alpha)
        print("beta data:", data.beta)

    .. code-block::

        alpha data: BitArray(<shape=(), num_shots=1, num_bits=2>)
        beta data: [1.2]

    )Ú_dataÚ_shape>   ÚkeysÚndimÚsizer   Úitemsr   Ú_SHAPEr   ÚvaluesÚ_FIELDSÚ_FIELD_TYPESÚ_RESTRICTED_NAMES© ©r   r   r   c               ó8  •— | j                              |¦  «        s9t          | j                              |¦  «        ¦  «        }t	          d|› �¦  «        ‚t          ¦   «         j        } |dt          |¦  «        ¦  «          |d|¦  «         t          | j	        ¦  «        }| 
                    ¦   «         D ]D\  }}t          |d|¦  «        d|…         |k    rt	          d|› d|› d�¦  «        ‚ |||¦  «         ŒEt          ¦   «                              ¦   «          dS )	a¶  
        Args:
            data: Name/value data to place in the data bin.
            shape: The leading shape common to all entries in the data bin. This defaults to
                the trivial leading shape of ``()`` that is compatible with all objects.

        Raises:
            ValueError: If a name overlaps with a method name on this class.
            ValueError: If some value is inconsistent with the provided shape.
        z&Cannot assign with these field names: r   r   r   NzThe value of 'z' does not lead with the shape ú.)r&   Ú
isdisjointÚsortedÚintersectionÚ
ValueErrorÚsuperÚ__setattr__r   Úlenr   r!   ÚgetattrÚ__init__)	Úselfr   ÚdataÚ	bad_namesÚ_setattrr   Únamer   Ú	__class__s	           €r   r3   zDataBin.__init__J   s*  ø€ ð Ô%×0Ò0°Ñ6Ô6ð 	SÝ˜tÔ5×BÒBÀ4ÑHÔHÑIÔIˆIÝÐQÀiÐQÐQÑRÔRÐRå‘7”7Ô&ˆØˆ��; uÑ-Ô-Ñ.Ô.Ð.Øˆ�˜$ÑÔÐå�4”;ÑÔˆØŸ:š:™<œ<ð 	"ð 	"‰KˆD�%Ý�u˜g uÑ-Ô-¨e¨t¨eÔ4¸Ò=Ð=Ý Ð!_°$Ð!_Ð!_ÐW\Ð!_Ð!_Ð!_Ñ`Ô`Ð`ØˆH�T˜5Ñ!Ô!Ð!Ð!å‰Œ×ÒÑÔÐÐÐr   c                ó*   — t          | j        ¦  «        S ©N)r1   r   ©r4   s    r   Ú__len__zDataBin.__len__e   s   € Ý�4”:‰ŒÐr   c                ó   — t           ‚r;   )ÚNotImplementedError)r4   Ú_s     r   r0   zDataBin.__setattr__h   s   € Ý!Ð!r   c                óà   — d„ |                       ¦   «         D ¦   «         }| j        r|                     d| j        › �¦  «         t	          | ¦  «        j        › dd                     |¦  «        › d�S )Nc                ó<   — g | ]\  }}|› d t          |¦  «        › �‘ŒS )ú=)r   )Ú.0r8   Úvals      r   ú
<listcomp>z$DataBin.__repr__.<locals>.<listcomp>l   s2   € ÐKÐKÐK±°°s�4Ð,Ð,�+ cÑ*Ô*Ð,Ð,ÐKÐKÐKr   zshape=ú(z, ú))r!   r   Úappendr   ÚtypeÚ__name__Újoin)r4   Úvalss     r   Ú__repr__zDataBin.__repr__k   sn   € ØKÐK¸d¿jºj¹l¼lÐKÑKÔKˆØŒ9ð 	/Ø�KŠKÐ- ¤Ð-Ð-Ñ.Ô.Ð.Ý�t‘*”*Ô%Ð:Ð:¨¯	ª	°$©¬Ð:Ð:Ð:Ð:r   Úkeyr   r   r   c                ój   — 	 | j         |         S # t          $ r}t          d|› d�¦  «        |‚d }~ww xY w)NzKey (z") does not exist in this data bin.)r   ÚKeyError)r4   rO   Úexs      r   Ú__getitem__zDataBin.__getitem__q   sT   € ð	TØ”:˜c”?Ð"øÝð 	Tð 	Tð 	TÝÐJ 3ÐJÐJÐJÑKÔKÐQSÐSøøøøð	Tøøøs   ‚ �
2™-­2Úboolc                ó   — || j         v S r;   )r   )r4   rO   s     r   Ú__contains__zDataBin.__contains__w   s   € Ø�d”jÐ Ð r   úIterable[str]c                ó*   — t          | j        ¦  «        S r;   )Úiterr   r<   s    r   Ú__iter__zDataBin.__iter__z   s   € Ý�D”JÑÔÐr   úKeysView[str]c                ó4   — | j                              ¦   «         S )zReturn a view of field names.)r   r   r<   s    r   r   zDataBin.keys}   s   € àŒz�ŠÑ Ô Ð r   úValuesView[Any]c                ó4   — | j                              ¦   «         S )zReturn a view of values.)r   r#   r<   s    r   r#   zDataBin.values�   s   € àŒz× Ò Ñ"Ô"Ð"r   úItemsView[str, Any]c                ó4   — | j                              ¦   «         S )z'Return a view of field names and values)r   r!   r<   s    r   r!   zDataBin.items…   s   € àŒz×ÒÑ!Ô!Ð!r   útuple[str, ...]c                ó*   — t          | j        ¦  «        S r;   )Útupler   r<   s    r   r$   zDataBin._FIELDS�   s   € å�T”ZÑ Ô Ð r   útuple[Any, ...]c                ój   — t          t          t          |                      ¦   «         ¦  «        ¦  «        S r;   )rc   ÚmaprJ   r#   r<   s    r   r%   zDataBin._FIELD_TYPES‘   s"   € å•S�˜tŸ{š{™}œ}Ñ-Ô-Ñ.Ô.Ð.r   útuple[int, ...]c                ó   — | j         S r;   r(   r<   s    r   r"   zDataBin._SHAPE•   s
   € àŒzÐr   )r   r   )rO   r   r   r   )rO   r   r   rT   )r   rW   )r   r[   )r   r]   )r   r_   )r   ra   )r   rd   )r   rg   )rK   Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__Ú	frozensetr&   r3   r=   r0   rN   rS   rV   rZ   r   r#   r!   Úpropertyr$   r%   r"   Ú__classcell__)r9   s   @r   r   r       s‡  ø€ € € € € ðð ð, $€Ià!˜	ð	
ð 	
ð 	
ñô Ðð" /1ð ð ð ð ð ð ð ð ð6ð ð ð"ð "ð "ð;ð ;ð ;ðTð Tð Tð Tð!ð !ð !ð !ð ð  ð  ð  ð!ð !ð !ð !ð#ð #ð #ð #ð"ð "ð "ð "ð ð!ð !ð !ñ „Xð!ð ð/ð /ð /ñ „Xð/ð ðð ð ñ „Xðð ð ð ð r   r   ÚfieldsúIterable[tuple[str, type]]r   útuple[int, ...] | Noneútype[DataBin]c                ó   — t           S )a[  Return the :class:`~DataBin` type.

    .. note::
        This class used to return a subclass of :class:`~DataBin`. However, that caused confusion
        and didn't have a useful purpose. Several internal projects made use of this internal
        function prior to qiskit 1.1. This function will be removed once these internal projects
        have made the appropriate changes.

    Args:
        fields: Tuples ``(name, type)`` specifying the attributes of the returned class.
        shape: The intended shape of every attribute of this class.

    Returns:
        The :class:`DataBin` type.
    )r   )rp   r   s     r   Úmake_data_binru   ›   s	   € õ$ €Nr   )r   r   r   r   r;   )rp   rq   r   rr   r   rs   )rk   Ú
__future__r   Útypingr   r   r   r   r   Únumpyr   r   r
   r   r   r   r   ru   r'   r   r   ú<module>ry      sè   ððð ð #Ð "Ð "Ð "Ð "Ð "à AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ Aà Ð Ð Ð à 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7ðð ð ð ðwð wð wð wð wˆkñ wô wð wðx IMðð ð ð ð ð ð r   