§
    º³Ùgv  ã                   óö   — d Z dgZddlZddlZddlZddlZddl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 d	Z ej        eej        ej        z  ¦  «        Z G d
„ dee¦  «        Z G d„ d¦  «        Zd„ ZdS )zBloch sphereÚBloché    N)ÚFancyArrowPatch)ÚAxes3DÚproj3d)ÚPatch3Dé   )Úmatplotlib_close_if_inlinea™  ^
    v?
    (?:
        (?:(?P<epoch>[0-9]+)!)?                           # epoch
        (?P<release>[0-9]+(?:\.[0-9]+)*)                  # release segment
        (?P<pre>                                          # pre-release
            [-_\.]?
            (?P<pre_l>(a|b|c|rc|alpha|beta|pre|preview))
            [-_\.]?
            (?P<pre_n>[0-9]+)?
        )?
        (?P<post>                                         # post release
            (?:-(?P<post_n1>[0-9]+))
            |
            (?:
                [-_\.]?
                (?P<post_l>post|rev|r)
                [-_\.]?
                (?P<post_n2>[0-9]+)?
            )
        )?
        (?P<dev>                                          # dev release
            [-_\.]?
            (?P<dev_l>dev)
            [-_\.]?
            (?P<dev_n>[0-9]+)?
        )?
    )
    (?:\+(?P<local>[a-z0-9]+(?:[-_\.][a-z0-9]+)*))?       # local version
$c                   ó$   — e Zd ZdZdZdd„Zd„ ZdS )ÚArrow3DzMakes a fancy arrowzmpl_toolkits.mplot3d.art3dÚzc                 ó    — t          j        | ddfi |¤Ž |                      t          t	          ||¦  «        ¦  «        ||¦  «         d | _        d S )N)r   r   )r   Ú__init__Úset_3d_propertiesÚtupleÚzipÚ_path2d)ÚselfÚxsÚysÚzsÚzdirÚkwargss         úP/granary/edev/quantum/lib/python3.11/site-packages/qiskit/visualization/bloch.pyr   zArrow3D.__init__x   sT   € õ 	Ô   v¨vÐ@Ð@¸Ð@Ð@Ð@Ø×Ò�u¥S¨¨R¡[¤[Ñ1Ô1°2°tÑ<Ô<Ð<ØˆŒˆˆó    c                 ór  — t          | j        Ž \  }}}t          j        |||| j        j        ¦  «        \  }}}t          j                             t          j
        ||g¦  «        ¦  «        | _        |                      |d         |d         f|d         |d         f¦  «         t          j        | |¦  «         d S )Nr   r   )r   Ú
_segment3dr   Úproj_transformÚaxesÚMÚ
matplotlibÚpathÚPathÚnpÚcolumn_stackr   Úset_positionsr   Údraw)r   ÚrendererÚxs3dÚys3dÚzs3dÚx_sÚy_sÚ_s           r   r&   zArrow3D.drawƒ   s£   € Ý ¤Ð0Ñˆˆd�DÝÔ+¨D°$¸¸d¼i¼kÑJÔJ‰ˆˆS�!Ý!”×+Ò+­B¬O¸SÀ#¸JÑ,GÔ,GÑHÔHˆŒØ×Ò˜C œF C¨¤FÐ+¨c°!¬f°c¸!´fÐ-=Ñ>Ô>Ð>ÝÔ˜T 8Ñ,Ô,Ð,Ð,Ð,r   N)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r&   © r   r   r   r   i   sD   € € € € € ØÐð .€Jð	ð 	ð 	ð 	ð-ð -ð -ð -ð -r   r   c                   óŠ   — e Zd ZdZ	 dd„Zd„ Zd„ Zd„ Zdd
„Zd„ Z	d„ Z
d„ Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zdd„ZdS )r   a<	  Class for plotting data on the Bloch sphere.  Valid data can be
    either points, vectors, or qobj objects.

    Attributes:
        axes (instance):
            User supplied Matplotlib axes for Bloch sphere animation.
        fig (instance):
            User supplied Matplotlib Figure instance for plotting Bloch sphere.
        font_color (str):
            Color of font used for Bloch sphere labels.
        font_size (int):
            Size of font used for Bloch sphere labels.
        frame_alpha (float):
            Sets transparency of Bloch sphere frame.
        frame_color (str):
            Color of sphere wireframe.
        frame_width (int):
            Width of wireframe.
        point_color (list):
            List of colors for Bloch sphere point markers to cycle through.
            i.e. By default, points 0 and 4 will both be blue ('b').
        point_marker (list):
            List of point marker shapes to cycle through.
        point_size (list):
            List of point marker sizes. Note, not all point markers look
            the same size when plotted!
        sphere_alpha (float):
            Transparency of Bloch sphere itself.
        sphere_color (str):
            Color of Bloch sphere.
        figsize (list):
            Figure size of Bloch sphere plot.  Best to have both numbers the same;
            otherwise you will have a Bloch sphere that looks like a football.
        vector_color (list):
            List of vector colors to cycle through.
        vector_width (int):
            Width of displayed vectors.
        vector_style (str):
            Vector arrowhead style (from matplotlib's arrow style).
        vector_mutation (int):
            Width of vectors arrowhead.
        view (list):
            Azimuthal and Elevation viewing angles.
        xlabel (list):
            List of strings corresponding to +x and -x axes labels, respectively.
        xlpos (list):
            Positions of +x and -x labels respectively.
        ylabel (list):
            List of strings corresponding to +y and -y axes labels, respectively.
        ylpos (list):
            Positions of +y and -y labels respectively.
        zlabel (list):
            List of strings corresponding to +z and -z axes labels, respectively.
        zlpos (list):
            Positions of +z and -z labels respectively.
    NFé   c                 óf  — d| _         |�d| _         || _        d| _        |�d| _         d| _        || _        || _        |r|nddg| _        |r|nddg| _        d| _        d| _        d| _	        d	| _
        d| _        d
dg| _        ddg| _        ddg| _        ddg| _        ddg| _        ddg| _        t$          j        d         | _        || _        g d¢| _        d| _        d| _        d| _        g d¢| _        g d¢| _        g d¢| _        g | _        g | _        g | _        d| _         g | _!        d| _"        d S )NFTé   iÄÿÿÿé   z#FFDDDDgš™™™™™É?Úgrayr   ú$x$Ú g333333ó?g333333ó¿ú$y$ú$\left|0\right>$ú$\left|1\right>$zaxes.labelcolor)z#dc267fz#648fffz#fe6100z#785ef0z#ffb000z-|>r4   )ÚbÚrÚgz#CC6600)é   é    é#   é-   )ÚoÚsÚdú^r   )#Ú_ext_figÚfigÚ	_ext_axesr   Ú
backgroundÚfigsizeÚviewÚsphere_colorÚsphere_alphaÚframe_colorÚframe_widthÚframe_alphaÚxlabelÚxlposÚylabelÚylposÚzlabelÚzlposÚpltÚrcParamsÚ
font_colorÚ	font_sizeÚvector_colorÚvector_widthÚvector_styleÚvector_mutationÚpoint_colorÚ
point_sizeÚpoint_markerÚpointsÚvectorsÚannotationsÚsavenumÚpoint_styleÚ	_rendered)r   rJ   r   rN   rM   rL   r]   s          r   r   zBloch.__init__Å   s}  € ð
 ˆŒØˆ?Ø ˆDŒMØˆŒØˆŒØÐØ ˆDŒMØ!ˆDŒNØˆŒ	à$ˆŒà")Ð5�w�w°°1¨vˆŒà Ð/�D�D s¨B iˆŒ	à%ˆÔàˆÔà!ˆÔàˆÔàˆÔà˜b�kˆŒà˜4�[ˆŒ
à˜b�kˆŒà˜4�[ˆŒ
ð +Ð,?Ð@ˆŒà˜4�[ˆŒ
õ œ,Ð'8Ô9ˆŒà"ˆŒð TÐSÐSˆÔàˆÔà!ˆÔà!ˆÔð 6Ð5Ð5ˆÔà*Ð*Ð*ˆŒà0Ð0Ð0ˆÔð ˆŒàˆŒàˆÔàˆŒàˆÔð ˆŒˆˆr   c                 óV  — d}|dk    rddg| _         ddg| _        ddg| _        d%S |dk    rddg| _         ddg| _        d	dg| _        d%S |d
k    rddg| _         ddg| _        ddg| _        d%S |dk    rddg| _         ddg| _        ddg| _        d%S |dk    r/|dz  |dz  g| _         |dz  |dz  g| _        |dz  |dz  g| _        d%S |dk    r/|dz  |dz  g| _         |dz  |dz  g| _        |dz  |dz  g| _        d%S |dk    rddg| _        d d!g| _        d"d#g| _         d%S t          d$¦  «        ‚)&ao  Set x, y and z labels according to one of conventions.

        Args:
            convention (str):
                One of the following:
                    - "original"
                    - "xyz"
                    - "sx sy sz"
                    - "01"
                    - "polarization jones"
                    - "polarization jones letters"
                    see also: http://en.wikipedia.org/wiki/Jones_calculus
                    - "polarization stokes"
                    see also: http://en.wikipedia.org/wiki/Stokes_parameters
        Raises:
            Exception: If convention is not valid.
        z$\left.|%s\right\rangle$Úoriginalr9   r:   r;   r<   r=   Úxyzz$z$zsx sy szz$s_x$z$s_y$z$s_z$Ú01zpolarization jonesz\nearrow\hspace{-1.46}\swarrowz\nwarrow\hspace{-1.46}\searrowz\circlearrowleftz\circlearrowrightz\leftrightarrowz\updownarrowzpolarization jones lettersÚDÚAÚLÚRÚHÚVzpolarization stokesz $\nearrow\hspace{-1.46}\swarrow$z $\nwarrow\hspace{-1.46}\searrow$z$\circlearrowleft$z$\circlearrowright$z$\leftrightarrow$z$\updownarrow$zNo such convention.N)rT   rV   rX   Ú
ValueError)r   Ú
conventionÚketexs      r   Úset_label_conventionzBloch.set_label_convention  sÁ  € ð$ .ˆð ˜Ò#Ð#Ø  "˜+ˆDŒKØ  "˜+ˆDŒKØ/Ð1EÐFˆDŒKˆKˆKØ˜5Ò Ð Ø  "˜+ˆDŒKØ  "˜+ˆDŒKØ  "˜+ˆDŒKˆKˆKØ˜:Ò%Ð%Ø" B˜-ˆDŒKØ" B˜-ˆDŒKØ" B˜-ˆDŒKˆKˆKØ˜4ÒÐØ˜r˜(ˆDŒKØ˜r˜(ˆDŒKØ/Ð1EÐFˆDŒKˆKˆKØÐ/Ò/Ð/àÐ;Ñ;ØÐ;Ñ;ðˆDŒKð !Ð#6Ñ6¸Ð@TÑ8TÐUˆDŒKØ Ð#5Ñ5°u¸Ñ7NÐOˆDŒKˆKˆKØÐ7Ò7Ð7Ø  3™;¨°©Ð4ˆDŒKØ  3™;¨°©Ð4ˆDŒKØ  3™;¨°©Ð4ˆDŒKˆKˆKØÐ0Ò0Ð0à5Ø5ðˆDŒKð 1Ð2HÐIˆDŒKØ/Ð1BÐCˆDŒKˆKˆKåÐ2Ñ3Ô3Ð3r   c                 óà  — d}|dz  }|dz  }|dt          t          | j        ¦  «        ¦  «        z   dz   z  }|dt          t          | j        ¦  «        ¦  «        z   dz   z  }|dz  }|dz  }|dz  }|d	t          | j        ¦  «        z   dz   z  }|d
t          | j        ¦  «        z   dz   z  }|dt          | j        ¦  «        z   dz   z  }|dt          | j        ¦  «        z   dz   z  }|dt          | j        ¦  «        z   dz   z  }|dt          | j	        ¦  «        z   dz   z  }|dt          | j
        ¦  «        z   dz   z  }|dt          | j        ¦  «        z   dz   z  }|dt          | j        ¦  «        z   dz   z  }|dt          | j        ¦  «        z   dz   z  }|dt          | j        ¦  «        z   dz   z  }|dt          | j        ¦  «        z   dz   z  }|dt          | j        ¦  «        z   dz   z  }|dt          | j        ¦  «        z   dz   z  }|dt          | j        ¦  «        z   dz   z  }|dt          | j        ¦  «        z   dz   z  }|dt          | j        ¦  «        z   dz   z  }|dt          | j        ¦  «        z   dz   z  }|dt          | j        ¦  «        z   dz   z  }|dt          | j        ¦  «        z   dz   z  }|dt          | j        ¦  «        z   dz   z  }|dt          | j        ¦  «        z   dz   z  }|S )Nr:   zBloch data:
z-----------
zNumber of points:  ú
zNumber of vectors: zBloch sphere properties:
z------------------------
zfont_color:      zfont_size:       zframe_alpha:     zframe_color:     zframe_width:     zpoint_color:     zpoint_marker:    zpoint_size:      zsphere_alpha:    zsphere_color:    zfigsize:         zvector_color:    zvector_width:    zvector_style:    zvector_mutation: zview:            zxlabel:          zxlpos:           zylabel:          zylpos:           zzlabel:          zzlpos:           )ÚstrÚlenre   rf   r\   r]   rS   rQ   rR   rb   rd   rc   rP   rO   rM   r^   r_   r`   ra   rN   rT   rU   rV   rW   rX   rY   )r   Ústrings     r   Ú__str__zBloch.__str__Q  s:  € ØˆØ�/Ñ!ˆØ�/Ñ!ˆØÐ'­#­c°$´+Ñ.>Ô.>Ñ*?Ô*?Ñ?À$ÑFÑFˆØÐ'­#­c°$´,Ñ.?Ô.?Ñ*@Ô*@Ñ@À4ÑGÑGˆØ�$‰ˆØÐ.Ñ.ˆØÐ.Ñ.ˆØÐ%­¨D¬OÑ(<Ô(<Ñ<¸tÑCÑCˆØÐ%­¨D¬NÑ(;Ô(;Ñ;¸dÑBÑBˆØÐ%­¨DÔ,<Ñ(=Ô(=Ñ=ÀÑDÑDˆØÐ%­¨DÔ,<Ñ(=Ô(=Ñ=ÀÑDÑDˆØÐ%­¨DÔ,<Ñ(=Ô(=Ñ=ÀÑDÑDˆØÐ%­¨DÔ,<Ñ(=Ô(=Ñ=ÀÑDÑDˆØÐ%­¨DÔ,=Ñ(>Ô(>Ñ>ÀÑEÑEˆØÐ%­¨D¬OÑ(<Ô(<Ñ<¸tÑCÑCˆØÐ%­¨DÔ,=Ñ(>Ô(>Ñ>ÀÑEÑEˆØÐ%­¨DÔ,=Ñ(>Ô(>Ñ>ÀÑEÑEˆØÐ%­¨D¬LÑ(9Ô(9Ñ9¸DÑ@Ñ@ˆØÐ%­¨DÔ,=Ñ(>Ô(>Ñ>ÀÑEÑEˆØÐ%­¨DÔ,=Ñ(>Ô(>Ñ>ÀÑEÑEˆØÐ%­¨DÔ,=Ñ(>Ô(>Ñ>ÀÑEÑEˆØÐ%­¨DÔ,@Ñ(AÔ(AÑAÀDÑHÑHˆØÐ%­¨D¬I©¬Ñ6¸Ñ=Ñ=ˆØÐ%­¨D¬KÑ(8Ô(8Ñ8¸4Ñ?Ñ?ˆØÐ%­¨D¬J©¬Ñ7¸$Ñ>Ñ>ˆØÐ%­¨D¬KÑ(8Ô(8Ñ8¸4Ñ?Ñ?ˆØÐ%­¨D¬J©¬Ñ7¸$Ñ>Ñ>ˆØÐ%­¨D¬KÑ(8Ô(8Ñ8¸4Ñ?Ñ?ˆØÐ%­¨D¬J©¬Ñ7¸$Ñ>Ñ>ˆØˆr   c                 ó>   — g | _         g | _        g | _        g | _        dS )z'Resets Bloch sphere data sets to empty.N)re   rf   ri   rg   ©r   s    r   ÚclearzBloch.clearr  s&   € àˆŒØˆŒØˆÔØˆÔÐÐr   rF   c                 óê  — t          |d         t          t          j        f¦  «        s|d         g|d         g|d         gg}t          j        |¦  «        }|dk    r§t          |d         ¦  «        dk    rVt          j        |d         d         g|d         d         g|d         d         gg¦  «        }t          j        ||d¬¦  «        }n|}| j                             |¦  «         | j                             d¦  «         dS |dk    r6| j                             |¦  «         | j                             d¦  «         dS | j                             |¦  «         | j                             d¦  «         dS )	a  Add a list of data points to Bloch sphere.

        Args:
            points (array_like):
                Collection of data points.
            meth (str):
                Type of points to plot, use 'm' for multicolored, 'l' for points
                connected with a line.
        r   r   é   rF   )ÚaxisÚlÚmN)	Ú
isinstanceÚlistr#   ÚndarrayÚarrayr|   Úappendre   ri   )r   re   ÚmethÚpntss       r   Ú
add_pointszBloch.add_pointsy  s_  € õ ˜& œ)¥d­B¬JÐ%7Ñ8Ô8ð 	=Ø˜a”y�k F¨1¤I ;°¸´°Ð<ˆFÝ”˜&Ñ!Ô!ˆØ�3Š;ˆ;Ý�6˜!”9‰~Œ~ Ò"Ð"Ý”x &¨¤)¨A¤, °&¸´)¸A´,°À&ÈÄ)ÈAÄ,ÀÐ PÑQÔQ�Ý”y  v°AÐ6Ñ6Ô6��à�ØŒK×Ò˜tÑ$Ô$Ð$ØÔ×#Ò# CÑ(Ô(Ð(Ð(Ð(Ø�SŠ[ˆ[ØŒK×Ò˜vÑ&Ô&Ð&ØÔ×#Ò# CÑ(Ô(Ð(Ð(Ð(àŒK×Ò˜vÑ&Ô&Ð&ØÔ×#Ò# CÑ(Ô(Ð(Ð(Ð(r   c                 óÊ   — t          |d         t          t          j        f¦  «        r!|D ]}| j                             |¦  «         ŒdS | j                             |¦  «         dS )zžAdd a list of vectors to Bloch sphere.

        Args:
            vectors (array_like):
                Array with vectors of unit length or smaller.
        r   N)r‡   rˆ   r#   r‰   rf   r‹   )r   rf   Úvecs      r   Úadd_vectorszBloch.add_vectors•  sq   € õ �g˜a”j¥4­¬Ð"4Ñ5Ô5ð 	)Øð )ð )�Ø”×#Ò# CÑ(Ô(Ð(Ð(ð)ð )ð ŒL×Ò Ñ(Ô(Ð(Ð(Ð(r   c                 óÚ   — t          |t          t          j        t          f¦  «        rt          |¦  «        dk    r|}nt          d¦  «        ‚| j                             |||dœ¦  «         dS )aï  Add a text or LaTeX annotation to Bloch sphere,
        parameterized by a qubit state or a vector.

        Args:
            state_or_vector (array_like):
                Position for the annotation.
                Qobj of a qubit or a vector of 3 elements.
            text (str):
                Annotation text.
                You can use LaTeX, but remember to use raw string
                e.g. r"$\langle x \rangle$"
                or escape backslashes
                e.g. "$\\langle x \\rangle$".
            **kwargs:
                Options as for mplot3d.axes3d.text, including:
                fontsize, color, horizontalalignment, verticalalignment.
        Raises:
            Exception: If input not array_like or tuple.
        é   z?Position needs to be specified by a qubit state or a 3D vector.)ÚpositionÚtextÚoptsN)	r‡   rˆ   r#   r‰   r   r|   Ú	TypeErrorrg   r‹   )r   Ústate_or_vectorr•   r   r�   s        r   Úadd_annotationzBloch.add_annotation¢  sp   € õ( �o­­b¬j½%Ð'@ÑAÔAð 	_ÅcÈ/ÑFZÔFZÐ^_ÒF_ÐF_Ø!ˆCˆCåÐ]Ñ^Ô^Ð^ØÔ×Ò¨S¸$ÈÐ OÐ OÑPÔPÐPÐPÐPr   c                 ó.   — |                       ¦   «          dS )z3
        Plots Bloch sphere and data sets.
        N)Úrenderr€   s    r   Úmake_spherezBloch.make_sphere¼  s   € ð 	�Š‰Œˆˆˆr   r:   c                 ó,  — | j         r| j                             ¦   «          d| _         | j        st	          j        | j        ¬¦  «        | _        | j        sìt           
                    t          j        ¦  «        }t          d„ |                     d¦  «                             d¦  «        D ¦   «         ¦  «        dk    rSt!          | j        | j        d         | j        d         d	¬
¦  «        | _        | j                             | j        ¦  «         n2t!          | j        | j        d         | j        d         ¬¦  «        | _        | j        rk| j                             ¦   «          | j                             dd¦  «         | j                             dd¦  «         | j                             dd¦  «         n~|                      ¦   «          | j                             ¦   «          | j                             dd¦  «         | j                             dd¦  «         | j                             dd¦  «         t3          | j        d¦  «        r| j                             d¦  «         | j                             d	¦  «         |                      ¦   «          |                      ¦   «          |                      ¦   «          |                      ¦   «          |                       ¦   «          |  !                    ¦   «          | j         "                    || j#        d¬¦  «         dS )zX
        Render the Bloch sphere and its data sets in on given figure and axes.
        T)rM   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S )N)Úint)Ú.0Úxs     r   ú	<genexpr>zBloch.render.<locals>.<genexpr>Ñ  s(   è è € ÐOÐO •S˜‘V”VÐOÐOÐOÐOÐOÐOr   Úreleaseú.)r“   é   r   r   r   F)ÚazimÚelevÚauto_add_to_figure)r¦   r§   gÍÌÌÌÌÌô¿gÍÌÌÌÌÌô?gffffffæ¿gffffffæ?Úset_box_aspect)r   r   r   gHáz®Gñ?)ÚfontsizeÚyN)$rj   r   r�   rI   rZ   ÚfigurerM   rJ   rK   ÚVERSION_PATTERN_REGEXÚsearchr    Ú__version__r   ÚgroupÚsplitr   rN   Úadd_axesrL   Ú
set_xlim3dÚ
set_ylim3dÚ
set_zlim3dÚ	plot_axesÚset_axis_offÚhasattrr©   ÚgridÚ	plot_backÚplot_pointsÚplot_vectorsÚ
plot_frontÚplot_axes_labelsÚplot_annotationsÚ	set_titler]   )r   ÚtitleÚversion_matchs      r   r›   zBloch.renderÂ  sÃ  € ð Œ>ð 	ØŒI�OŠOÑÔÐàˆŒð Œ}ð 	8Ý”z¨$¬,Ð7Ñ7Ô7ˆDŒHàŒ~ð 	Ý1×8Ò8½Ô9OÑPÔPˆMÝÐOÐO ]×%8Ò%8¸Ñ%CÔ%C×%IÒ%IÈ#Ñ%NÔ%NÐOÑOÔOÑOÔOÐS\Ò\Ð\Ý"Ø”H 4¤9¨Q¤<°d´iÀ´lÐW\ðñ ô �”	ð ”×!Ò! $¤)Ñ,Ô,Ð,Ð,å"Ø”HØœ 1œØœ 1œðñ ô �”	ð Œ?ð 
	,ØŒI�OŠOÑÔÐØŒI× Ò   sÑ+Ô+Ð+ØŒI× Ò   sÑ+Ô+Ð+ØŒI× Ò   sÑ+Ô+Ð+Ð+à�NŠNÑÔÐØŒI×"Ò"Ñ$Ô$Ð$ØŒI× Ò   sÑ+Ô+Ð+ØŒI× Ò   sÑ+Ô+Ð+ØŒI× Ò   sÑ+Ô+Ð+õ �4”9Ð.Ñ/Ô/ð 	0ØŒI×$Ò$ YÑ/Ô/Ð/àŒ	�Š�uÑÔÐØ�ŠÑÔÐØ×ÒÑÔÐØ×ÒÑÔÐØ�ŠÑÔÐØ×ÒÑÔÐØ×ÒÑÔÐØŒ	×Ò˜E¨D¬N¸dÐÑCÔCÐCÐCÐCr   c           
      óð  — t          j        dt           j        d¦  «        }t          j        dt           j        d¦  «        }t          j        t          j        |¦  «        t          j        |¦  «        ¦  «        }t          j        t          j        |¦  «        t          j        |¦  «        ¦  «        }t          j        t          j        |j        d         ¦  «        t          j        |¦  «        ¦  «        }| j         	                    |||dd| j
        d| j        ¬¦  «         | j                             |||dd| j        | j        ¬¦  «         | j                             dt          j        |¦  «        z  dt          j        |¦  «        z  dd| j        | j        ¬	¦  «         | j                             dt          j        |¦  «        z  dt          j        |¦  «        z  dd
| j        | j        ¬	¦  «         dS )zback half of spherer   rA   rƒ   ©ÚrstrideÚcstrideÚcolorÚ	linewidthÚalphar6   ©rÅ   rÆ   rÇ   rÉ   ç      ð?r   ©r   r   ÚlwrÇ   r¡   N©r#   ÚlinspaceÚpiÚouterÚcosÚsinÚonesÚshaper   Úplot_surfacerO   rP   Úplot_wireframerQ   rS   ÚplotrR   ©r   Úu_angleÚv_angleÚx_dirÚy_dirÚz_dirs         r   rº   zBloch.plot_back÷  s½  € å”+˜a¥¤¨Ñ+Ô+ˆÝ”+˜a¥¤¨Ñ+Ô+ˆÝ”�œ ™œ­"¬&°©/¬/Ñ:Ô:ˆÝ”�œ ™œ­"¬&°©/¬/Ñ:Ô:ˆÝ”�œ ¤¨qÔ!1Ñ2Ô2µB´F¸7±O´OÑDÔDˆØŒ	×ÒØØØØØØÔ#ØØÔ#ð 	ñ 		
ô 		
ð 		
ð 	Œ	× Ò ØØØØØØÔ"ØÔ"ð 	!ñ 	
ô 	
ð 	
ð 	Œ	�ŠØ•"”&˜‘/”/Ñ!Ø•"”&˜‘/”/Ñ!ØØØÔØÔ"ð 	ñ 	
ô 	
ð 	
ð 	Œ	�ŠØ•"”&˜‘/”/Ñ!Ø•"”&˜‘/”/Ñ!ØØØÔØÔ"ð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r   c           
      óò  — t          j        t           j         dd¦  «        }t          j        dt           j        d¦  «        }t          j        t          j        |¦  «        t          j        |¦  «        ¦  «        }t          j        t          j        |¦  «        t          j        |¦  «        ¦  «        }t          j        t          j        |j        d         ¦  «        t          j        |¦  «        ¦  «        }| j         	                    |||dd| j
        d| j        ¬¦  «         | j                             |||dd| j        | j        ¬¦  «         | j                             dt          j        |¦  «        z  dt          j        |¦  «        z  dd| j        | j        ¬	¦  «         | j                             dt          j        |¦  «        z  dt          j        |¦  «        z  dd
| j        | j        ¬	¦  «         dS )zfront half of spherer   rA   rƒ   rÄ   r6   rÊ   rË   r   rÌ   r¡   NrÎ   rÙ   s         r   r½   zBloch.plot_front$  s¿  € å”+�rœu˜f a¨Ñ,Ô,ˆÝ”+˜a¥¤¨Ñ+Ô+ˆÝ”�œ ™œ­"¬&°©/¬/Ñ:Ô:ˆÝ”�œ ™œ­"¬&°©/¬/Ñ:Ô:ˆÝ”�œ ¤¨qÔ!1Ñ2Ô2µB´F¸7±O´OÑDÔDˆØŒ	×ÒØØØØØØÔ#ØØÔ#ð 	ñ 		
ô 		
ð 		
ð 	Œ	× Ò ØØØØØØÔ"ØÔ"ð 	!ñ 	
ô 	
ð 	
ð 	Œ	�ŠØ•"”&˜‘/”/Ñ!Ø•"”&˜‘/”/Ñ!ØØØÔØÔ"ð 	ñ 	
ô 	
ð 	
ð 	Œ	�ŠØ•"”&˜‘/”/Ñ!Ø•"”&˜‘/”/Ñ!ØØØÔØÔ"ð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r   c           	      óF  — t          j        ddd¦  «        }| j                             |d|z  ddd| j        | j        ¬¦  «         | j                             d|z  |ddd| j        | j        ¬¦  «         | j                             d|z  |dd	d
| j        | j        ¬¦  «         dS )r   g      ð¿rË   rƒ   r   r   ÚX©r   r   ÚlabelrÍ   rÇ   ÚYr«   ÚZN)r#   rÏ   r   rØ   rR   rQ   )r   Úspans     r   r¶   zBloch.plot_axesQ  sÈ   € åŒ{˜4  aÑ(Ô(ˆØŒ	�ŠØ�!�d‘(˜q s°#¸$Ô:JÐRVÔRbð 	ñ 	
ô 	
ð 	
ð 	Œ	�ŠØ�‰H�d˜q s°#¸$Ô:JÐRVÔRbð 	ñ 	
ô 	
ð 	
ð 	Œ	�ŠØ�‰H�d˜q s°#¸$Ô:JÐRVÔRbð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r   c                 ó:  — | j         | j        dddœ} | j        j        d| j        d          d| j        d         fi |¤Ž  | j        j        d| j        d          d| j        d         fi |¤Ž  | j        j        | j        d         dd| j        d         fi |¤Ž  | j        j        | j        d         dd| j        d         fi |¤Ž  | j        j        dd| j        d         | j	        d         fi |¤Ž  | j        j        dd| j        d         | j	        d         fi |¤Ž | j        j
                             ¦   «         | j        j
                             ¦   «         z   D ]}|                     d¦  «         Œ| j        j                             ¦   «         | j        j                             ¦   «         z   D ]}|                     d¦  «         Œ| j        j                             ¦   «         | j        j                             ¦   «         z   D ]}|                     d¦  «         ŒdS )zaxes labelsÚcenter©rª   rÇ   ÚhorizontalalignmentÚverticalalignmentr   r   FN)r]   r\   r   r•   rU   rT   rW   rV   rY   rX   ÚxaxisÚget_ticklinesÚget_ticklabelsÚset_visibleÚyaxisÚzaxis)r   r–   Úitems      r   r¾   zBloch.plot_axes_labels^  s%  € ð œØ”_Ø#+Ø!)ð	
ð 
ˆð 	ˆŒ	Œ�q˜4œ: aœ=˜.¨!¨T¬[¸¬^ÐDÐD¸tÐDÐDÐDØˆŒ	Œ�q˜4œ: aœ=˜.¨!¨T¬[¸¬^ÐDÐD¸tÐDÐDÐDàˆŒ	Œ�t”z !”} a¨¨D¬K¸¬NÐCÐC¸dÐCÐCÐCØˆŒ	Œ�t”z !”} a¨¨D¬K¸¬NÐCÐC¸dÐCÐCÐCàˆŒ	Œ�q˜!˜TœZ¨œ]¨D¬K¸¬NÐCÐC¸dÐCÐCÐCØˆŒ	Œ�q˜!˜TœZ¨œ]¨D¬K¸¬NÐCÐC¸dÐCÐCÐCà”I”O×1Ò1Ñ3Ô3°d´i´o×6TÒ6TÑ6VÔ6VÑVð 	$ð 	$ˆDØ×Ò˜UÑ#Ô#Ð#Ð#Ø”I”O×1Ò1Ñ3Ô3°d´i´o×6TÒ6TÑ6VÔ6VÑVð 	$ð 	$ˆDØ×Ò˜UÑ#Ô#Ð#Ð#Ø”I”O×1Ò1Ñ3Ô3°d´i´o×6TÒ6TÑ6VÔ6VÑVð 	$ð 	$ˆDØ×Ò˜UÑ#Ô#Ð#Ð#ð	$ð 	$r   c                 óB  — t          | j        ¦  «        D �]\  }}|d         t          j        ddg¦  «        z  }|d          t          j        ddg¦  «        z  }|d         t          j        ddg¦  «        z  }| j        t          j        |t          | j        ¦  «        ¦  «                 }| j        dk    r(| j         	                    |||ddd| j
        |¬¦  «         ŒÉt          |||| j        | j
        | j        |¬¦  «        }| j                             |¦  «         �Œ
d	S )
zPlot vectorr   r   rƒ   r:   r   rå   râ   )Úmutation_scalerÍ   Ú
arrowstylerÇ   N)Ú	enumeraterf   r#   rŠ   r^   Úmodr|   r`   r   rØ   r_   r   ra   Ú
add_artist)r   ÚkÚvectorr(   r)   r*   rÇ   Úarrs           r   r¼   zBloch.plot_vectorsv  s9  € õ # 4¤<Ñ0Ô0ð 	*ñ 	*‰IˆAˆvà˜!”9�rœx¨¨A¨Ñ/Ô/Ñ/ˆDØ˜1”I�:¥¤¨!¨Q¨Ñ 0Ô 0Ñ0ˆDØ˜!”9�rœx¨¨A¨Ñ/Ô/Ñ/ˆDàÔ%¥b¤f¨Qµ°DÔ4EÑ0FÔ0FÑ&GÔ&GÔHˆEàÔ  BÒ&Ð&à”	—’Ø˜$ ¨°¸CÀDÔDUÐ]bð ñ ô ð ð õ
 ØØØØ#'Ô#7ØÔ(Ø#Ô0Øðñ ô �ð ”	×$Ò$ SÑ)Ô)Ð)Ñ)ð3	*ð 	*r   c                 ó6  ‡
— t          | j        ¦  «        D �]\  }Š
t          ‰
d         ¦  «        }ˆ
fd„t          |¦  «        D ¦   «         }t	          t          ||d         z
  ¦  «        |d         z  dk    ¦  «        r_t          t          |t          |¦  «        ¦  «        ¦  «        }|                     ¦   «          t          |Ž \  }}t          j
        |¦  «        }nt          j        |¦  «        }| j        |         dk    �r| j                             t          j        ‰
d         |         ¦  «        t          j        ‰
d         |         ¦  «         t          j        ‰
d         |         ¦  «        | j        t          j        |t          | j        ¦  «        ¦  «                 ddd| j        t          j        |t          | j        ¦  «        ¦  «                 | j        t          j        |t          | j        ¦  «        ¦  «                 ¬	¦	  «	         �Œý| j        |         d
k    �rFt          j
        | j        t)          j        |t          | j        ¦  «        z  ¦  «        z  ¦  «        }|d|…         }t          ||         ¦  «        }| j        t          j        |t          | j        ¦  «        ¦  «                 }| j        t          j        |t          | j        ¦  «        ¦  «                 }| j                             t          j        ‰
d         |         ¦  «        t          j        ‰
d         |         ¦  «         t          j        ‰
d         |         ¦  «        |ddd||¬	¦	  «	         �ŒU| j        |         dk    r›| j        t          j        |t          | j        ¦  «        ¦  «                 }	| j                             t          j        ‰
d         ¦  «        t          j        ‰
d         ¦  «         t          j        ‰
d         ¦  «        dd|	¬¦  «         �ŒdS )zPlot pointsr   c                 óž   •— g | ]I}t          j        ‰d          |         dz  ‰d         |         dz  z   ‰d         |         dz  z   ¦  «        ‘ŒJS )r   rƒ   r   )r#   Úsqrt)r    ÚjÚpoints     €r   ú
<listcomp>z%Bloch.plot_points.<locals>.<listcomp>™  sa   ø€ ð ð ð ØTU•”˜˜aœ œ qÑ(¨5°¬8°A¬;¸!Ñ+;Ñ;¸eÀA¼hÀq¼kÈQÑ>NÑNÑOÔOðð ð r   gê-�™—q=rF   r   rƒ   Nr   )rF   rÉ   Ú	edgecolorr   rÇ   Úmarkerr†   r…   g      è?)rÉ   r   rÇ   )rö   re   r|   ÚrangeÚanyÚabsrˆ   r   Úsortr#   rŠ   Úarangeri   r   ÚscatterÚrealrc   r÷   rb   rd   ÚmathÚceilrØ   )r   rù   ÚnumÚdistÚzippedÚindpermÚ
pnt_colorsr  Úpnt_sizerÇ   r   s             @r   r»   zBloch.plot_points”  s˜  ø€ õ " $¤+Ñ.Ô.ð 6	ñ 6	‰HˆAˆuÝ�e˜A”h‘-”-ˆCðð ð ð ÝY^Ð_bÑYcÔYcðñ ô ˆDõ •3�t˜d 1œg‘~Ñ&Ô&¨¨a¬Ñ0°5Ò8Ñ9Ô9ð )å�c $­¨c©
¬
Ñ3Ô3Ñ4Ô4�Ø—’‘”�Ý # V ‘��gÝœ( 7Ñ+Ô+��åœ) C™.œ.�ØÔ Ô" cÒ)Ñ)Ø”	×!Ò!Ý”G˜E !œH WÔ-Ñ.Ô.Ý”W˜U 1œX gÔ.Ñ/Ô/Ð/Ý”G˜E !œH WÔ-Ñ.Ô.Ø”o¥b¤f¨Qµ°D´OÑ0DÔ0DÑ&EÔ&EÔFØØ"ØØÔ*­2¬6°!µS¸Ô9IÑ5JÔ5JÑ+KÔ+KÔLØÔ,­R¬V°Aµs¸4Ô;LÑ7MÔ7MÑ-NÔ-NÔOð "ñ 
ô 
ð 
ñ 
ð Ô! !Ô$¨Ò+Ñ+ÝœX dÔ&6½¼À3ÍÈTÔM]ÑI^ÔI^ÑC^Ñ9_Ô9_Ñ&_Ñ`Ô`�
à'¨¨#¨Ô.�
Ý! *¨WÔ"5Ñ6Ô6�
ØÔ*­2¬6°!µS¸Ô9JÑ5KÔ5KÑ+LÔ+LÔM�Øœ?­2¬6°!µS¸¼Ñ5IÔ5IÑ+JÔ+JÔK�Ø”	×!Ò!Ý”G˜E !œH WÔ-Ñ.Ô.Ý”W˜U 1œX gÔ.Ñ/Ô/Ð/Ý”G˜E !œH WÔ-Ñ.Ô.ØØØ"ØØ$Ø!ð "ñ 
ô 
ð 
ñ 
ð Ô! !Ô$¨Ò+Ð+ØÔ(­¬°µ3°tÔ7GÑ3HÔ3HÑ)IÔ)IÔJ�Ø”	—’Ý”G˜E !œHÑ%Ô%Ý”W˜U 1œXÑ&Ô&Ð&Ý”G˜E !œHÑ%Ô%ØØØð ñ ô ð ùð_6	ð 6	r   c                 óà   — | j         D ]e}|d         }| j        | j        dddœ}|                     |d         ¦  «          | j        j        |d         |d          |d         |d         fi |¤Ž Œfd	S )
zPlot annotationsr”   rè   ré   r–   r   r   rƒ   r•   N)rg   r]   r\   Úupdater   r•   )r   Ú
annotationr�   r–   s       r   r¿   zBloch.plot_annotationsÏ  s›   € ð Ô*ð 		Pð 		PˆJØ˜ZÔ(ˆCà œNØœØ'/Ø%-ð	ð ˆDð �KŠK˜
 6Ô*Ñ+Ô+Ð+ØˆDŒIŒN˜3˜qœ6 C¨¤F 7¨C°¬F°J¸vÔ4FÐOÐOÈ$ÐOÐOÐOÐOð		Pð 		Pr   c                 óv   — |                       |¬¦  «         | j        rt          j        | j        ¦  «         dS dS )zC
        Display Bloch sphere and corresponding data sets.
        )rÁ   N)r›   rJ   rZ   Úshow)r   rÁ   s     r   r  z
Bloch.showÝ  sD   € ð 	�Š˜%ˆÑ Ô Ð ØŒ8ð 	ÝŒH�T”XÑÔÐÐÐð	ð 	r   Úpngc                 ó  — |                       ¦   «          |r{t          j                             t          j        ¦   «         dz   t          |¦  «        z   ¦  «        s8t          j        t          j        ¦   «         dz   t          |¦  «        z   ¦  «         |€©|r]| j                             t          j        ¦   «         dz   t          |¦  «        z   dz   t          | j	        ¦  «        z   dz   |z   ¦  «         nd| j                             t          j        ¦   «         dz   t          | j	        ¦  «        z   dz   |z   ¦  «         n| j                             |¦  «         | xj	        dz  c_	        | j        rt          | j        ¦  «         dS dS )aä  Saves Bloch sphere to file of type ``format`` in directory ``dirc``.

        Args:
            name (str):
                Name of saved image. Must include path and format as well.
                i.e. '/Users/Paul/Desktop/bloch.png'
                This overrides the 'format' and 'dirc' arguments.
            output (str):
                Format of output image.
            dirc (str):
                Directory for output images. Defaults to current working directory.
        ú/Nz/bloch_r¤   r   )r›   Úosr!   ÚisdirÚgetcwdr{   ÚmakedirsrJ   Úsavefigrh   r	   )r   ÚnameÚoutputÚdircs       r   Úsavez
Bloch.saveå  sa  € ð 	�Š‰ŒˆØð 	;Ý”7—=’=¥¤¡¤¨sÑ!2µS¸±Y´YÑ!>Ñ?Ô?ð ;Ý”�BœI™KœK¨#Ñ-µ°D±	´	Ñ9Ñ:Ô:Ð:Øˆ<Øð ]Ø”× Ò Ý”I‘K”K #Ñ%­¨D©	¬	Ñ1°IÑ=ÅÀDÄLÑ@QÔ@QÑQÐTWÑWÐZ`Ñ`ñô ð ð ð ”× Ò ¥¤¡¤¨yÑ!8½3¸t¼|Ñ;LÔ;LÑ!LÈsÑ!RÐU[Ñ![Ñ\Ô\Ð\Ð\àŒH×Ò˜TÑ"Ô"Ð"ØˆŒ˜ÑˆŒØŒ8ð 	1Ý& t¤xÑ0Ô0Ð0Ð0Ð0ð	1ð 	1r   )NNNNFr4   )rF   )r:   )Nr  N)r.   r/   r0   r1   r   rx   r~   r�   rŽ   r‘   r™   rœ   r›   rº   r½   r¶   r¾   r¼   r»   r¿   r  r#  r2   r   r   r   r   ‹   sb  € € € € € ð7ð 7ðt Y[ðPð Pð Pð Pðd84ð 84ð 84ðtð ð ðBð ð ð)ð )ð )ð )ð8)ð )ð )ðQð Qð Qð4ð ð ð3Dð 3Dð 3Dð 3Dðj+
ð +
ð +
ðZ+
ð +
ð +
ðZ
ð 
ð 
ð$ð $ð $ð0*ð *ð *ð<9ð 9ð 9ðvPð Pð Pðð ð ð ð1ð 1ð 1ð 1ð 1ð 1r   c                 óˆ   — |                       ¦   «         |                      ¦   «         z   D ]}|                     d¦  «         ŒdS )zN
    Set visible property of ticklines and ticklabels of an axis to False
    FN)rí   rî   rï   )r„   rò   s     r   Ú_hide_tick_lines_and_labelsr%    sQ   € ð ×"Ò"Ñ$Ô$ t×':Ò':Ñ'<Ô'<Ñ<ð  ð  ˆØ×Ò˜ÑÔÐÐð ð  r   )r1   Ú__all__r  r  ÚreÚnumpyr#   r    Úmatplotlib.pyplotÚpyplotrZ   Úmatplotlib.patchesr   Úmpl_toolkits.mplot3dr   r   Úmpl_toolkits.mplot3d.art3dr   Úutilsr	   ÚVERSION_PATTERNÚcompileÚVERBOSEÚ
IGNORECASEr­   r   r   r%  r2   r   r   ú<module>r3     sI  ðð^ Ð àˆ)€à €€€Ø 	€	€	€	Ø 	€	€	€	Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø .Ð .Ð .Ð .Ð .Ð .à -Ð -Ð -Ð -Ð -Ð -ð
ð ðD #˜œ
 ?°B´JÀÄÑ4NÑOÔOÐ ð-ð -ð -ð -ð -ˆg�ñ -ô -ð -ðDw	1ð w	1ð w	1ð w	1ð w	1ñ w	1ô w	1ð w	1ðt ð  ð  ð  ð  r   