Ë
    ÷Ç:j@” ã                   óf  — d Z ddlZddlZddlZddlmZ ddlZg d¢Z	 dd„Z	 G d„ d«      Z
	 dd„Zdd	„Zdd
„Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z G d„ d«      Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 	 	 	 	 d d„Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d!d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd"d„Zy)#a  
**********
Matplotlib
**********

Draw networks with matplotlib.

Examples
--------
>>> G = nx.complete_graph(5)
>>> nx.draw(G)

See Also
--------
 - :doc:`matplotlib <matplotlib:index>`
 - :func:`matplotlib.pyplot.scatter`
 - :obj:`matplotlib.patches.FancyArrowPatch`
é    N)ÚNumber)ÚdisplayÚapply_matplotlib_colorsÚdrawÚdraw_networkxÚdraw_networkx_nodesÚdraw_networkx_edgesÚdraw_networkx_labelsÚdraw_networkx_edge_labelsÚdraw_bipartiteÚdraw_circularÚdraw_kamada_kawaiÚdraw_randomÚdraw_spectralÚdraw_springÚdraw_planarÚ
draw_shellÚdraw_forceatlas2c                 ó–  ‡— ddl }|r| j                  «       }n3| j                  «       r| j                  d¬«      }n| j                  «       }|�|€/|D �	cg c]
  }	||	   |   ‘Œ }
}	|€t	        |
«      }|€t        |
«      }|j                  j                  |¬«      Š‰j                  ||«       ˆfd„}|rKt        j                  | | j                  «       D �ci c]  }| || j                  |   |   «      “Œ c}|«       yt        j                  | |D �ci c]  }| || j                  |   |   «      “Œ c}|«       yc c}	w c c}w c c}w )a·  
    Apply colors from a matplotlib colormap to a graph.

    Reads values from the `src_attr` and use a matplotlib colormap
    to produce a color. Write the color to `dest_attr`.

    Parameters
    ----------
    G : nx.Graph
        The graph to read and compute colors for.

    src_attr : str or other attribute name
        The name of the attribute to read from the graph.

    dest_attr : str or other attribute name
        The name of the attribute to write to on the graph.

    map : matplotlib.colormap
        The matplotlib colormap to use.

    vmin : float, default None
        The minimum value for scaling the colormap. If `None`, find the
        minimum value of `src_attr`.

    vmax : float, default None
        The maximum value for scaling the colormap. If `None`, find the
        maximum value of `src_attr`.

    nodes : bool, default True
        Whether the attribute names are edge attributes or node attributes.
    r   NT©Úkeys©Úcmapc                 óF   •— t        d„ ‰j                  | «      D «       «      S )Nc              3   ó2   K  — | ]  }t        |«      –— Œ y ­w©N)Úfloat)Ú.0Úxs     ún/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/networkx/drawing/nx_pylab.pyú	<genexpr>z:apply_matplotlib_colors.<locals>.do_map.<locals>.<genexpr>g   s   è ø€ Ò9 !”U˜1—XÑ9ùs   ‚)ÚtupleÚto_rgba)r   Úmappers    €r    Údo_mapz'apply_matplotlib_colors.<locals>.do_mape   s   ø€ äÑ9 v§~¡~°aÓ'8Ô9Ó9Ð9ó    )Ú
matplotlibÚnodesÚis_multigraphÚedgesÚminÚmaxÚcmÚScalarMappableÚset_climÚnxÚset_node_attributesÚset_edge_attributes)ÚGÚsrc_attrÚ	dest_attrÚmapÚvminÚvmaxr(   ÚmplÚ	type_iterÚaÚvalsr%   ÚnÚer$   s                 @r    r   r   0   s3  ø€ óD áØ—G‘G“I‰	Ø	
�‰Ô	Ø—G‘G �GÓ&‰	à—G‘G“Iˆ	à€|�t�|Ø09Ö:¨1�	˜!‘˜XÓ&Ð:ˆÐ:Øˆ<Ü�t“9ˆDØˆ<Ü�t“9ˆDà�V‰V×"Ñ"¨Ð"Ó,€FØ
‡O�O�D˜$Ôô:ñ Ü
×ÑØ¸¿¹»ÖC°A�‘6˜!Ÿ'™' !™* XÑ.Ó/Ñ/ÒCÀYõ	
ô 	×ÑØ¸ÖC°A�‘6˜!Ÿ'™' !™* XÑ.Ó/Ñ/ÒCÀYõ	
ùò% ;ùò Dùò Ds   ÁD<Ã E
Ä E
c                   ó>   ‡ — e Zd Zddddœˆ fd„
Zd„ Zd„ Zˆ fd„Zˆ xZS )	ÚCurvedArrowTextBaseç      à?FN)Ú	label_posÚlabels_horizontalÚaxc                óP  •— || _         || _        || _        |€t        j	                  «       }|| _        | j                  |«      \  | _        | _        | _	        t        ‰| �,  | j                  | j                  g|¢­d| j                  i|¤Ž | j
                  j                  | «       y )NÚrotation)ÚarrowrB   rC   ÚpltÚgcarD   Ú_update_text_pos_angler   ÚyÚangleÚsuperÚ__init__Ú
add_artist)ÚselfrG   rB   rC   rD   ÚargsÚkwargsÚ	__class__s          €r    rN   zCurvedArrowTextBase.__init__t   s�   ø€ ð ˆŒ
ð #ˆŒØ!2ˆÔØˆ:Ü—‘“ˆBØˆŒØ%)×%@Ñ%@ÀÓ%GÑ"ˆŒ�”˜œ
ô 	‰Ñ˜Ÿ™ §¡ÐN¨$ÒN¸¿¹ÐNÀvÒNà�‰×Ñ˜4Õ r&   c           	      ó°  — |j                   }| j                  j                  }|j                  €t	        d«      ‚|j                  |j                  d   «      }|j                  |j                  d   «      }|j                  ||f«      \  }} |j                  «       |||j                  |j                  |j                  |z  |j                  |z  ¬«      }|S )a=  
        This is part of FancyArrowPatch._get_path_in_displaycoord
        It omits the second part of the method where path is converted
            to polygon based on width
        The transform is taken from ax, not the object, as the object
            has not been added yet, and doesn't have transform
        zPCan only draw labels for fancy arrows with posA and posB inputs, not custom pathr   é   )ÚpatchAÚpatchBÚshrinkAÚshrinkB)Ú_dpi_corrD   Ú	transDataÚ
_posA_posBÚ
ValueErrorÚ_convert_xy_unitsÚ	transformÚget_connectionstylerV   rW   rX   rY   )rP   rG   Údpi_corÚ
trans_dataÚposAÚposBÚ_paths          r    Ú_get_arrow_path_dispz(CurvedArrowTextBase._get_arrow_path_disp�   sÒ   € ð —.‘.ˆØ—W‘W×&Ñ&ˆ
Ø×ÑÐ#Üð8óð ð ×&Ñ& u×'7Ñ'7¸Ñ':Ó;ˆØ×&Ñ& u×'7Ñ'7¸Ñ':Ó;ˆØ!×+Ñ+¨T°4¨LÓ9‰ˆˆtØ+�×)Ñ)Ó+ØØØ—<‘<Ø—<‘<Ø—M‘M GÑ+Ø—M‘M GÑ+ô
ˆð ˆr&   c                 ór  — dd l }dd l}| j                  }d|z
  }| j                  |«      }|j	                  «       }|j
                  }t        ||j                  j                  j                  |j                  j                  j                  z  «      x}	rK|\  \  }
}\  }}\  }}|dz  |
z  d|z  |z  |z  z   |dz  |z  z   }|dz  |z  d|z  |z  |z  z   |dz  |z  z   }�n‰t        ||j                  j                  j                  |j                  j                  j                  z  |j                  j                  j                  z  «      sdt        |«      › �}t        |«      ‚|j                   }t#        dt%        |«      «      D �cg c]3  }||   |j&                  j(                  j*                  k(  r||dz
  |dz    ‘Œ5 }}t%        |«      x}dk7  rt|D �cg c]  }t-        j.                  |Ž ‘Œ }}t1        |«      }d}d}|dz
  }t3        |«      D ]3  \  }}||z  }||z  }||k(  s||k  r||z
  ||z  z  }d|z
  }||   g} n|}Œ5 |\  \  \  }} \  }!}"||z  |!|z  z   }| |z  |"|z  z   }| j4                  rd}#n{|	r/d|z  
z
  z  d|z  |z
  z  z   }$d|z  z
  z  d|z  |z
  z  z   }%n!z
  dz  }$" z
  dz  }%|j7                  |%|$«      d|j8                  z  z  dz  }#|#dkD  r|#dz  }#n
|#dk  r|#dz  }#| j:                  j<                  j?                  «       jA                  ||f«      \  }}|||#fS c c}w c c}w )	Nr   rU   é   zinvalid connection style: ih  éZ   é´   i¦ÿÿÿ)!r'   ÚnumpyrB   rf   r`   ÚverticesÚ
isinstanceÚpatchesÚConnectionStyleÚAngle3ÚArc3ÚAngleÚArcÚBarÚtypeÚ	TypeErrorÚcodesÚrangeÚlenÚpathÚPathÚLINETOÚmathÚdistÚsumÚ	enumeraterC   Úarctan2ÚpirD   r[   Úinvertedr_   )&rP   rG   r9   ÚnpÚtÚttÚ	path_dispÚconnÚpointsÚis_curveÚx1Úy1ÚcxÚcyÚx2Úy2r   rK   Úmsgrw   ÚiÚlinesÚnlinesÚlineÚdistsÚdist_totÚcdistÚlast_cutÚi_lastr~   ÚcutÚcx1Úcy1Úcx2Úcy2rL   Úchange_xÚchange_ys&                                         r    rJ   z*CurvedArrowTextBase._update_text_pos_angleª   s¡  € ó 	!Ûà�N‰NˆØ�‰UˆØ×-Ñ-¨eÓ4ˆ	Ø×(Ñ(Ó*ˆà×#Ñ#ˆÜ!ØØ�K‰K×'Ñ'×.Ñ.°·±×1LÑ1L×1QÑ1QÑQó
ð 
ˆ8ð 
ð
 ,2Ñ(‰HˆR�‘h�r˜2¡  RØ�A‘˜‘
˜Q ™U R™Z¨"™_Ñ,¨q°!©t°b©yÑ8ˆAØ�A‘˜‘
˜Q ™U R™Z¨"™_Ñ,¨q°!©t°b©yÑ8ŠAäØØ—‘×+Ñ+×1Ñ1Ø—+‘+×-Ñ-×1Ñ1ñ2à—+‘+×-Ñ-×1Ñ1ñ2ôð 3´4¸³:°,Ð?�Ü “nÐ$à—O‘OˆEô ˜q¤# f£+Ó.öàØ˜‘8˜sŸx™xŸ}™}×3Ñ3Ò3ð �q˜1‘u˜q 1™uÒ%ðˆEð ô ˜e›*Ð$�¨Ò*Ø6;Ö<¨dœŸ™ DÒ)Ð<�Ð<Ü˜u›:�Ø�Ø�Ø !™�Ü(¨Ó/ò #‘G�A�tØ˜T‘M�EØ (Ñ*�CØ˜F’{ a¨#¢gØ ™\¨d°X©oÑ>˜Ø ™U˜Ø!& q¡ 
˜ÙØ"‘Hð#ð */Ñ&Ñ%‰jˆs�C™*˜3 Ø�b‘˜3 ™7Ñ"ˆAØ�b‘˜3 ™7Ñ"ˆAð ×!Ò!à‰Eñ Ø˜r™6 R¨"¡WÑ-°°A±¸¸b¹Ñ0AÑA�Ø˜r™6 R¨"¡WÑ-°°A±¸¸b¹Ñ0AÑA‘à #™I¨™?�Ø #™I¨™?�Ø—J‘J˜x¨Ó2°a¸"¿%¹%±iÑ@À3ÑFˆEà�rŠzØ˜‘‘Ø˜’Ø˜‘�Ø—‘×"Ñ"×+Ñ+Ó-×7Ñ7¸¸A¸Ó?‰ˆˆAØ�!�Uˆ{ÐùòYùò =s   Æ8L/ÇL4c                 ó  •— | j                  | j                  «      \  | _        | _        | _        | j                  | j                  | j                  f«       | j                  | j                  «       t        ‰| �!  |«       y r   )	rJ   rG   r   rK   rL   Úset_positionÚset_rotationrM   r   )rP   ÚrendererrS   s     €r    r   zCurvedArrowTextBase.drawø   s]   ø€ à%)×%@Ñ%@ÀÇÁÓ%LÑ"ˆŒ�”˜œ
Ø×Ñ˜4Ÿ6™6 4§6¡6Ð*Ô+Ø×Ñ˜$Ÿ*™*Ô%ä‰‰�XÕr&   )Ú__name__Ú
__module__Ú__qualname__rN   rf   rJ   r   Ú__classcell__)rS   s   @r    r@   r@   s   s)   ø„ ð
 ØØö!ò2ò:L÷\ð r&   r@   c                 ó^  ‡‡‡2‡3‡4‡5‡6‡7‡8‡9‡:‡;— ddl m} ddlŠ6ddlm} ddlŠ8i dd“dd“dd“d	d
“ddddddddddœ“dd“dd“dd“dd“dd“dd“dd“ddddddddddœddd dd!œ
“d"d#“d$d“d%| j                  «       rd&nd#“d'| j                  «       rd(nd“d)dddd*œ¥Š2‰D ]  }|‰2vsŒt        j                  d+|› �«      ‚ ‰€|j                  «       Š‰j                  d,‰2d,   «      r‰j                  d-d-d.d.d.d.¬/«       ˆ2ˆˆ7fd0„}ˆ2ˆ6fd1„}ˆ4fd2„}ˆ2ˆ3ˆfd3„}	ˆ2ˆ3ˆfd4„Š4dZˆ2ˆ3ˆˆ7fd5„	Š5ˆˆ6ˆ8fd6„Š:ˆ8fd7„Š;ˆ3ˆ4ˆ5ˆ6ˆ9ˆ:ˆ;fd8„}
 G d9„ d:t        ‰6j                  j                  «      }‰j                  dd;«      }t        |t         «      r|r| j#                  «       }n=g }n:t        j$                  | |d«      j'                  «       D ��cg c]
  \  }}|sŒ	|‘Œ }}}| j)                  |«      Š7‰j                  dd<«      Š9d=}t+        ‰9«      r%t        j,                  ‰7 ‰9‰7«      |«       |Š9|‰d<   nJt        j$                  | ‰9«      i k(  r1t        j,                  ‰7t        j.                  ‰7«      |«       |Š9|‰d<   t1        |«      dkD  �rK‰j                  dd>«      } |t        j$                  ‰7|‰2d   «      j3                  «       «      D �]  }‰7j#                  |¬?«      D ��cg c]  \  }}||k(  s
|€
|‰2d   k(  r|‘Œ }}}‰8j5                   ||d<«      «      }‰8j5                  t7         ||d@«       ||dA«      «      D ��cg c]  \  }} |||«      ‘Œ c}}«      }‰8j5                  t9        |«      D ��cg c]  \  }} ‰5|dBd.«      x}dk7  r|n||   ‘Œ c}}«      }‰j;                  |dd…df   |dd…dCf    ||dD«      || ||dE«      |dF¬G«       �Œ
 ‰j                  ddH«      }|��g|d.u�rbi }t        |t<        «      r|}d}‰7j#                  |¬?«      D �]6  \  }}|d.u rŒt        |t<        «      sdH|�|n|i}|j                  dH|«      }t        |t>        «      st?        |«      }|jA                  |«       ‰7j"                  |   ‰9   \  }} ‰j                  || ||j                  dD‰2d   dD   «      |j                  d@‰2d   d@   «      |j                  dI‰2d   dI   «      |j                  dJ‰2d   dJ   «      |j                  dK‰2d   dK   «      |j                  dL‰2d   dL   «      ‰jB                  |j                  dM‰2d   dM   «      ¬N«       �Œ9 ‰j                  dd;«      }!t        |!t         «      r|!r| jE                  «       }"n=g }"n:t        jF                  | |!d«      j'                  «       D �#�cg c]
  \  }#}|sŒ	|#‘Œ }"}#}| jI                  |"«      Š3t        j,                  ‰3t        j$                  ‰7‰9«      ‰9¬O«       ‰3jK                  «       r)‰3jE                  d¬P«      D �#cg c]  }# ||#«      sŒ|#‘Œ c}#n&‰3jE                  «       D �#cg c]  }# ||#«      sŒ|#‘Œ c}#}$‰3jK                  «       r)‰3jE                  d¬P«      D �#cg c]  }# ||#«      rŒ|#‘Œ c}#n&‰3jE                  «       D �#cg c]  }# ||#«      rŒ|#‘Œ c}#}%‰8j5                  |$D �&��'cg c]  ^}&}}' ‰5|&d<d¬Q«       ‰5|d<d¬Q«      f‘Œ c}'}}&«      }(t1        |$«      dkD  rO‰6j                   jM                  |( |	|$d@«       |	|$dR«       |	|$dS«       |	|$dA«      dTdC¬U«      })‰jO                  |)«       i }*t1        |%«      dkD  r&|%D ]!  }# |
|#«      |*|#<   ‰jQ                  |*|#   «       Œ# ‰j                  ddH«      }+i }t        |+t<        «      r|+}dH}+‰3jK                  «       r‰3jE                  |+d¬V«      n‰3jE                  |+¬?«      },|+��à|+d.u�rÛ|,D �]Õ  �^ }#}tS        |#«      }#|d.u s|€Œt        |t<        «      sdH|i}|jA                  |«       |j                  dH«      }t        |t>        «      st?        |«      }	 |*|#   }-|#d   |#dC   k(  �r]|-jW                  «       }.‰jB                  jY                  ‰3j"                  |#d      ‰9   «      }/ |.|/|/«      }0‰jB                  j[                  «       j]                  |0«      }1|1j^                  d   \  }} ‰j                  || ||j                  dD‰2d   dD   «      |j                  d@‰2d   d@   «      |j                  dI‰2d   dI   «      |j                  dJ‰2d   dJ   «      |j                  dA‰2d   dA   «      |j                  dK‰2d   dK   «      |j                  dL‰2d   dL   «      d‰jB                  |j                  dM‰2d   dM   «      dC¬W«       �ŒÙ ||-||j                  dD‰2d   dD   «      |j                  d@‰2d   d@   «      |j                  dI‰2d   dI   «      |j                  dJ‰2d   dJ   «      |j                  dA‰2d   dA   «      |j                  dM‰2d   dM   «      |j                  dK‰2d   dK   «      |j                  dL‰2d   dL   «      |j                  d<‰2d   d<   «      |j                  dX‰2d   dX   «      ‰jB                  dC‰¬Y«       �ŒØ ‰9|k(  rt        j`                  | |«       | S c c}}w c c}}w c c}}w c c}}w c c}}#w c c}#w c c}#w c c}#w c c}#w c c}'}}&w # tT        $ r  |
|#«      }-Y �ŒÓw xY w)[aY-  Draw the graph G.

    Draw the graph as a collection of nodes connected by edges.
    The exact details of what the graph looks like are controlled by the below
    attributes. All nodes and nodes at the end of visible edges must have a
    position set, but nearly all other node and edge attributes are options and
    nodes or edges missing the attribute will use the default listed below. A more
    complete description of each parameter is given below this summary.

    .. list-table:: Default Visualization Attributes
        :widths: 25 25 50
        :header-rows: 1

        * - Parameter
          - Default Attribute
          - Default Value
        * - node_pos
          - `"pos"`
          - If there is not position, a layout will be calculated with `nx.spring_layout`.
        * - node_visible
          - `"visible"`
          - True
        * - node_color
          - `"color"`
          - #1f78b4
        * - node_size
          - `"size"`
          - 300
        * - node_label
          - `"label"`
          - Dict describing the node label. Defaults create a black text with
            the node name as the label. The dict respects these keys and defaults:

            * size : 12
            * color : black
            * family : sans serif
            * weight : normal
            * alpha : 1.0
            * h_align : center
            * v_align : center
            * bbox : Dict describing a `matplotlib.patches.FancyBboxPatch`.
              Default is None.

        * - node_shape
          - `"shape"`
          - "o"
        * - node_alpha
          - `"alpha"`
          - 1.0
        * - node_border_width
          - `"border_width"`
          - 1.0
        * - node_border_color
          - `"border_color"`
          - Matching node_color
        * - edge_visible
          - `"visible"`
          - True
        * - edge_width
          - `"width"`
          - 1.0
        * - edge_color
          - `"color"`
          - Black (#000000)
        * - edge_label
          - `"label"`
          - Dict describing the edge label. Defaults create black text with a
            white bounding box. The dictionary respects these keys and defaults:

            * size : 12
            * color : black
            * family : sans serif
            * weight : normal
            * alpha : 1.0
            * bbox : Dict describing a `matplotlib.patches.FancyBboxPatch`.
              Default {"boxstyle": "round", "ec": (1.0, 1.0, 1.0), "fc": (1.0, 1.0, 1.0)}
            * h_align : "center"
            * v_align : "center"
            * pos : 0.5
            * rotate : True

        * - edge_style
          - `"style"`
          - "-"
        * - edge_alpha
          - `"alpha"`
          - 1.0
        * - edge_arrowstyle
          - `"arrowstyle"`
          - ``"-|>"`` if `G` is directed else ``"-"``
        * - edge_arrowsize
          - `"arrowsize"`
          - 10 if `G` is directed else 0
        * - edge_curvature
          - `"curvature"`
          - arc3
        * - edge_source_margin
          - `"source_margin"`
          - 0
        * - edge_target_margin
          - `"target_margin"`
          - 0

    Parameters
    ----------
    G : graph
        A networkx graph

    canvas : Matplotlib Axes object, optional
        Draw the graph in specified Matplotlib axes

    node_pos : string or function, default "pos"
        A string naming the node attribute storing the position of nodes as a tuple.
        Or a function to be called with input `G` which returns the layout as a dict keyed
        by node to position tuple like the NetworkX layout functions.
        If no nodes in the graph has the attribute, a spring layout is calculated.

    node_visible : string or bool, default visible
        A string naming the node attribute which stores if a node should be drawn.
        If `True`, all nodes will be visible while if `False` no nodes will be visible.
        If incomplete, nodes missing this attribute will be shown by default.

    node_color : string, default "color"
        A string naming the node attribute which stores the color of each node.
        Visible nodes without this attribute will use '#1f78b4' as a default.

    node_size : string or number, default "size"
        A string naming the node attribute which stores the size of each node.
        Visible nodes without this attribute will use a default size of 300.

    node_label : string or bool, default "label"
        A string naming the node attribute which stores the label of each node.
        The attribute value can be a string, False (no label for that node),
        True (the node is the label) or a dict keyed by node to the label.

        If a dict is specified, these keys are read to further control the label:

        * label : The text of the label; default: name of the node
        * size : Font size of the label; default: 12
        * color : Font color of the label; default: black
        * family : Font family of the label; default: "sans-serif"
        * weight : Font weight of the label; default: "normal"
        * alpha : Alpha value of the label; default: 1.0
        * h_align : The horizontal alignment of the label.
            one of "left", "center", "right"; default: "center"
        * v_align : The vertical alignment of the label.
            one of "top", "center", "bottom"; default: "center"
        * bbox : A dict of parameters for `matplotlib.patches.FancyBboxPatch`.

        Visible nodes without this attribute will be treated as if the value was True.

    node_shape : string, default "shape"
        A string naming the node attribute which stores the label of each node.
        The values of this attribute are expected to be one of the matplotlib shapes,
        one of 'so^>v<dph8'. Visible nodes without this attribute will use 'o'.

    node_alpha : string, default "alpha"
        A string naming the node attribute which stores the alpha of each node.
        The values of this attribute are expected to be floats between 0.0 and 1.0.
        Visible nodes without this attribute will be treated as if the value was 1.0.

    node_border_width : string, default "border_width"
        A string naming the node attribute storing the width of the border of the node.
        The values of this attribute are expected to be numeric. Visible nodes without
        this attribute will use the assumed default of 1.0.

    node_border_color : string, default "border_color"
        A string naming the node attribute which storing the color of the border of the node.
        Visible nodes missing this attribute will use the final node_color value.

    edge_visible : string or bool, default "visible"
        A string nameing the edge attribute which stores if an edge should be drawn.
        If `True`, all edges will be drawn while if `False` no edges will be visible.
        If incomplete, edges missing this attribute will be shown by default. Values
        of this attribute are expected to be booleans.

    edge_width : string or int, default "width"
        A string nameing the edge attribute which stores the width of each edge.
        Visible edges without this attribute will use a default width of 1.0.

    edge_color : string or color, default "color"
        A string nameing the edge attribute which stores of color of each edge.
        Visible edges without this attribute will be drawn black. Each color can be
        a string or rgb (or rgba) tuple of floats from 0.0 to 1.0.

    edge_label : string, default "label"
        A string naming the edge attribute which stores the label of each edge.
        The values of this attribute can be a string, number or False or None. In
        the latter two cases, no edge label is displayed.

        If a dict is specified, these keys are read to further control the label:

        * label : The text of the label, or the name of an edge attribute holding the label.
        * size : Font size of the label; default: 12
        * color : Font color of the label; default: black
        * family : Font family of the label; default: "sans-serif"
        * weight : Font weight of the label; default: "normal"
        * alpha : Alpha value of the label; default: 1.0
        * h_align : The horizontal alignment of the label.
            one of "left", "center", "right"; default: "center"
        * v_align : The vertical alignment of the label.
            one of "top", "center", "bottom"; default: "center"
        * bbox : A dict of parameters for `matplotlib.patches.FancyBboxPatch`.
        * rotate : Whether to rotate labels to lie parallel to the edge, default: True.
        * pos : A float showing how far along the edge to put the label; default: 0.5.

    edge_style : string, default "style"
        A string naming the edge attribute which stores the style of each edge.
        Visible edges without this attribute will be drawn solid. Values of this
        attribute can be line styles, e.g. '-', '--', '-.' or ':' or words like 'solid'
        or 'dashed'. If no edge in the graph has this attribute and it is a non-default
        value, assume that it describes the edge style for all edges in the graph.

    edge_alpha : string or float, default "alpha"
        A string naming the edge attribute which stores the alpha value of each edge.
        Visible edges without this attribute will use an alpha value of 1.0.

    edge_arrowstyle : string, default "arrowstyle"
        A string naming the edge attribute which stores the type of arrowhead to use for
        each edge. Visible edges without this attribute use ``"-"`` for undirected graphs
        and ``"-|>"`` for directed graphs.

        See `matplotlib.patches.ArrowStyle` for more options

    edge_arrowsize : string or int, default "arrowsize"
        A string naming the edge attribute which stores the size of the arrowhead for each
        edge. Visible edges without this attribute will use a default value of 10.

    edge_curvature : string, default "curvature"
       A string naming the edge attribute storing the curvature and connection style
       of each edge. Visible edges without this attribute will use "arc3" as a default
       value, resulting an a straight line between the two nodes. Curvature can be given
       as 'arc3,rad=0.2' to specify both the style and radius of curvature.

       Please see `matplotlib.patches.ConnectionStyle` and
       `matplotlib.patches.FancyArrowPatch` for more information.

    edge_source_margin : string or int, default "source_margin"
        A string naming the edge attribute which stores the minimum margin (gap) between
        the source node and the start of the edge. Visible edges without this attribute
        will use a default value of 0.

    edge_target_margin : string or int, default "target_margin"
        A string naming the edge attribute which stores the minimumm margin (gap) between
        the target node and the end of the edge. Visible edges without this attribute
        will use a default value of 0.

    hide_ticks : bool, default True
        Weather to remove the ticks from the axes of the matplotlib object.

    Raises
    ------
    NetworkXError
        If a node or edge is missing a required parameter such as `pos` or
        if `display` receives an argument not listed above.

    ValueError
        If a node or edge has an invalid color format, i.e. not a color string,
        rgb tuple or rgba tuple.

    Returns
    -------
    The input graph. This is potentially useful for dispatching visualization
    functions.
    r   )ÚCounterNÚnode_posÚnode_visibleTÚ
node_colorú#1f78b4Ú	node_sizeé,  Ú
node_labelé   z#000000ú
sans-serifÚnormalç      ð?Úcenter)ÚsizeÚcolorÚfamilyÚweightÚalphaÚh_alignÚv_alignÚbboxÚ
node_shapeÚoÚ
node_alphaÚnode_border_widthÚnode_border_colorÚfaceÚedge_visibleÚ
edge_widthÚ
edge_colorÚ
edge_labelÚround©r¶   r¶   r¶   ©ÚboxstyleÚecÚfcrA   )
r¸   r¹   rº   r»   r¼   r¿   r½   r¾   ÚposÚrotateÚ
edge_styleú-Ú
edge_alphaÚedge_arrowstyleú-|>Úedge_arrowsizeé
   Úarc3)Úedge_curvatureÚedge_source_marginÚedge_target_marginÚ
hide_ticksz-Unrecognized visualization keyword argument: rÝ   ÚbothF©ÚaxisÚwhichÚbottomÚleftÚlabelbottomÚ	labelleftc                 ó°  •‡— d‰› �}‰|   }‰j                  |‰«      Š|€3| D ].  }‰‰j                  |   vsŒt        j                  d‰› d|› �«      ‚ ‰�Kt        j                  ‰‰«      i k(  r2t        ˆfd„‰j                  «       D «       «      r| D �cg c]  }‰‘Œ c}S | D �cg c]!  }‰j                  |   j                  ‰|«      ‘Œ# c}S c c}w c c}w )úFReturn a list of attribute values for `seq`, using a default if neededÚnode_úAttribute 'z' missing for node c              3   ó8   •K  — | ]  \  }}d |v sŒ‰|k(  –— Œ y­w)ÚnodeN© ©r   ÚkÚvÚattrs      €r    r!   z:display.<locals>.node_property_sequence.<locals>.<genexpr>k  ó   øè ø€ ÒH¡$ ! Q¸FÀaºK�D˜A•IÑHùó   ƒ�
)Úgetr(   r0   ÚNetworkXErrorÚget_node_attributesÚanyÚitems)	Úseqrð   Ú
param_nameÚdefaultr=   Ú_ÚdefaultsrR   Únode_subgraphs	    `    €€€r    Únode_property_sequencez'display.<locals>.node_property_sequenceW  sç   ù€ ð ˜T˜F�^ˆ
Ø˜:Ñ&ˆØ�z‰z˜* dÓ+ˆàˆ?àò W�Ø˜}×2Ñ2°1Ñ5Ò5Ü×*Ñ*¨[¸¸Ð>QÐRSÐQTÐ+UÓVÐVðWð ÐÜ×&Ñ& }°dÓ;¸rÒAÜÓH¨&¯,©,«.ÔHÔHà"%Ö&˜Q’DÒ&Ð&àCFÖG¸a�×#Ñ# AÑ&×*Ñ*¨4°Õ9ÒGÐGùò 'ùâGó   Â	CÂ%&Cc                 óV  •— t        | t        «      r>‰j                  j                  j	                  | «      }|‰d   k7  r|d   |d   |d   |fS |S t        | t
        «      rt        | «      dk(  r| d   | d   | d   |fS t        | t
        «      rt        | «      dk(  r| S t        d| › �«      ‚)NrÂ   r   rU   rh   é   é   zInvalid format for color: )rm   ÚstrÚcolorsÚcolorConverterr#   r"   ry   r]   )r¹   r¼   Úrgbarü   r9   s      €€r    Úcompute_colorszdisplay.<locals>.compute_colorsq  s¯   ø€ Ü�eœSÔ!Ø—:‘:×,Ñ,×4Ñ4°UÓ;ˆDà˜ Ñ.Ò.Ø˜Q™  a¡¨$¨q©'°5Ð9Ð9ØˆKä�eœUÔ#¬¨E«
°aªØ˜!‘H˜e A™h¨¨a©°%Ð8Ð8ä�eœUÔ#¬¨E«
°aªØˆLäÐ5°e°WÐ=Ó>Ð>r&   c                 óŠ   •—  ‰| d«      dk(  xr5  ‰| d«      dk(  xr'  ‰| d«      dk(  xr  ‰| d«      dk(  xr | d   | d   k7  S )	NÚ
arrowstylerÓ   Ú	curvaturerÙ   Úsource_marginr   Útarget_marginrU   rì   )r>   Úget_edge_attrs    €r    Úcollection_compatiblez&display.<locals>.collection_compatibleŠ  sk   ø€ á˜!˜\Ó*¨cÑ1ò Ù˜a Ó-°Ñ7òá˜a Ó1°QÑ6òñ ˜a Ó1°QÑ6òð
 �!‘˜˜!™‘ð	
r&   c                 ó°  •‡— d‰› �}‰|   }‰j                  |‰«      Š|€3| D ].  }‰‰j                  |   vsŒt        j                  d‰› d|› �«      ‚ ‰�Kt        j                  ‰‰«      i k(  r2t        ˆfd„‰j                  «       D «       «      r| D �cg c]  }‰‘Œ c}S | D �cg c]!  }‰j                  |   j                  ‰|«      ‘Œ# c}S c c}w c c}w )rç   Úedge_ré   z' missing for edge c              3   ó8   •K  — | ]  \  }}d |v sŒ‰|k(  –— Œ y­w)ÚedgeNrì   rí   s      €r    r!   z:display.<locals>.edge_property_sequence.<locals>.<genexpr>¤  rñ   rò   )ró   r*   r0   rô   Úget_edge_attributesrö   r÷   )	rø   rð   rù   rú   r>   rû   rü   Úedge_subgraphrR   s	    `    €€€r    Úedge_property_sequencez'display.<locals>.edge_property_sequence”  sç   ù€ ð ˜T˜F�^ˆ
Ø˜:Ñ&ˆØ�z‰z˜* dÓ+ˆàˆ?àò W�Ø˜}×2Ñ2°1Ñ5Ò5Ü×*Ñ*¨[¸¸Ð>QÐRSÐQTÐ+UÓVÐVðWð
 ÐÜ×&Ñ& }°dÓ;¸rÒAÜÓH¨&¯,©,«.ÔHÔHà"%Ö&˜Q’DÒ&Ð&àCFÖG¸a�×#Ñ# AÑ&×*Ñ*¨4°Õ9ÒGÐGùò 'ùâGrÿ   c                 ó4  •— d|› �}‰|   }‰j                  ||«      }|€,|‰j                  |    vrt        j                  d|› d| › �«      ‚|�-t        j                  ‰|«      i k(  r|‰j                  «       v r|S ‰j                  |    j                  ||«      S )z@Return the final edge attribute value, using default if not Noner  ré   z' missing from edge )ró   r*   r0   rô   r  Úvalues)r>   rð   rù   rú   rü   r  rR   s       €€€r    r  zdisplay.<locals>.get_edge_attrª  s®   ø€ ð ˜T˜F�^ˆ
Ø˜:Ñ&ˆØ�z‰z˜* dÓ+ˆàˆ?˜t¨=×+>Ñ+>¸qÑ+AÑAÜ×"Ñ" [°°Ð6JÈ1È#Ð#NÓOÐOð ÐÜ×&Ñ& }°dÓ;¸rÒAØ˜Ÿ™›Ñ'àˆKà×"Ñ" 1Ñ%×)Ñ)¨$°Ó8Ð8r&   c                 ó@  •— |r‰n‰	}d|› �}‰|   }‰j                  ||«      }|€,||j                  |    vrt        j                  d|› d| › �«      ‚|�-t        j                  ||«      i k(  r|‰j                  «       v r|S |j                  |    j                  ||«      S )z@Return the final node attribute value, using default if not Nonerè   ré   z' missing from node )ró   r(   r0   rô   rõ   r  )
r=   rð   Úuse_edge_subgraphÚsubgraphrù   rú   rü   r  rR   rý   s
         €€€€r    Úget_node_attrzdisplay.<locals>.get_node_attr½  s±   ø€ á$5‘=¸=ˆà˜T˜F�^ˆ
Ø˜:Ñ&ˆØ�z‰z˜* dÓ+ˆàˆ?˜t¨8¯>©>¸!Ñ+<Ñ<Ü×"Ñ" [°°Ð6JÈ1È#Ð#NÓOÐOð ÐÜ×&Ñ& x°Ó6¸"Ò<Ø˜Ÿ™›Ñ'àˆKà�~‰~˜aÑ ×$Ñ$ T¨7Ó3Ð3r&   c                 ó   •‡ ‡— ˆˆ ˆˆˆfd„}|S )Nc           
      ó0  •— ‰j                  | |k(  «      st        j                  d«      ‚‰j                  j	                  «       j                  | «      }‰j                  ‰«      dz  }|dz  }‰j                  d|g||g|dgddg| dg| |gd|gg«      }‰dz  rD|j                  \  }}	t        ‰dz  «      D ]  }
|	| }	}Œ	 ‰j                  ||	g«      j                  }‰j                  j                  ‰j                  j                  ||z   «      g d¢«      S )NúD`self_loop` connection style methodis only to be used for self-loopséH   rA   r   r  ©rU   r  r  r  r  r  r  )Úallr0   rô   r[   rƒ   r_   ÚsqrtÚasarrayÚTrx   Úarrayrz   r{   )rc   rd   rQ   rR   Údata_locÚv_shiftÚh_shiftrz   r   rK   rû   ÚcanvasÚ
edge_indexr9   r°   r„   s              €€€€€r    Úself_loop_connectionz8display.<locals>.self_loop.<locals>.self_loop_connectionÓ  s7  ø€ Ø—6‘6˜$ $™,Ô'Ü×&Ñ&ð8óð ð ×'Ñ'×0Ñ0Ó2×<Ñ<¸TÓBˆHð —g‘g˜iÓ(¨2Ñ-ˆGØ ‘mˆGà—:‘:ð ˜�Là˜gÐ&Ø˜a�LØ˜�Fà�X˜q�MØ�X˜wÐ'Ø˜�LðóˆDð  ˜AŠ~Ø—v‘v‘��1Ü˜z¨A™~Ó.ò !�AØ˜q˜b�q‘Að!à—x‘x  A Ó'×)Ñ)�Ø—8‘8—=‘=Ø× Ñ ×*Ñ*¨8°d©?Ó;Ò=Róð r&   rì   )r*  r°   r+  r)  r9   r„   s   `` €€€r    Ú	self_loopzdisplay.<locals>.self_loopÒ  s   ú€ ÷%	ð %	ðN $Ð#r&   c                 ób   •— |dv r‰j                  d| z  «      dz  S ‰j                  | «      dz  S ©Nzs^>v<drh   )r"  )r¸   Úmarkerr„   s     €r    Úto_marker_edgezdisplay.<locals>.to_marker_edgeü  s6   ø€ Ø�XÑØ—7‘7˜1˜t™8Ó$ qÑ(Ð(à—7‘7˜4“= 1Ñ$Ð$r&   c                 ó  •—  ‰	 ‰| d   d«       ‰| d   d«      «      }t        | ‰| d«      «      } ‰	 ‰| d   d«       ‰| d   d«      «      }t        | ‰| d«      «      }‰j                  j                  ‰j                  | d      ‰   ‰j                  | d      ‰    ‰| d«      | d   | d   k7  r	 ‰| d«      n( ‰t	        | «      d	k(  rdn| d	   d
z   ‰| d   d«      «       ‰| d«       ‰| d«       ‰| d«       ‰| d«      ||d¬«      S )Nr   r¸   Úshaper  rU   r  r	  r
  rh   r  r¹   ÚstyleÚwidthÚ	arrowsize)	r	  Úconnectionstyler¹   Ú	linestyleÚ	linewidthÚmutation_scalerX   rY   Úzorder)r,   rn   ÚFancyArrowPatchr(   ry   )
r>   r  r  r  r  r  r9   rÐ   r,  r0  s
      €€€€€€€r    Úbuild_fancy_arrowz"display.<locals>.build_fancy_arrow  sV  ø€ Ù&Ù˜!˜A™$ Ó'Ù˜!˜A™$ Ó(ó
ˆô ØÙ˜!˜_Ó-ó
ˆñ
 'Ù˜!˜A™$ Ó'Ù˜!˜A™$ Ó(ó
ˆô ØÙ˜!˜_Ó-ó
ˆð �{‰{×*Ñ*Ø×Ñ  !¡Ñ% cÑ*Ø×Ñ  !¡Ñ% cÑ*Ù$ Q¨Ó5ð �Q‘4˜1˜Q™4’<ñ ˜a Ô-áÜ˜Q› 1š‘A¨!¨A©$°©(Ù! ! A¡$¨Ó/óñ
    7Ó+Ù# A wÓ/Ù# A wÓ/Ù(¨¨KÓ8Ø!Ø!Øð% +ó 
ð 	
r&   c                   ó   — e Zd Zy)ú display.<locals>.CurvedArrowTextN©r¦   r§   r¨   rì   r&   r    ÚCurvedArrowTextr>  )  ó   „ Ør&   r@  ÚvisiblerÐ   z!display's position attribute namer2  )Údatar¹   r¼   Úborder_colorrU   r¸   Úborder_widthrh   )ÚsÚcr/  Ú
linewidthsÚ
edgecolorsr:  Úlabelrº   r»   r½   r¾   r¿   )r¸   r¹   rº   r»   ÚhorizontalalignmentÚverticalalignmentr_   r¿   )Únamer   )r  r4  r3  ©rU   )r  rH  r7  r¼   Úantialiasedsr:  )rC  r   )r¸   r¹   rº   r»   r¼   rK  rL  rF   r_   r¿   r:  rÑ   )r¸   r¹   rº   r»   r¼   r¿   rK  rL  rB   rC   r_   r:  rD   )T)1Úcollectionsr«   r'   Úmatplotlib.pyplotÚpyplotrk   Úis_directedr0   rô   rI   ró   Útick_paramsr@   ÚtextÚTextrm   Úboolr(   rõ   r÷   r  Úcallabler1   Úspring_layoutry   r  r#  Úzipr€   ÚscatterÚdictr  Úupdater[   r*   r  r  r)   ÚLineCollectionÚadd_collectionÚ	add_patchr"   ÚKeyErrorr`   r_   rƒ   Útransform_pathrl   Úremove_node_attributes)<r3   r)  rR   r«   rH   Úkwargrþ   r  r  r  r<  r@  r­   Úvisible_nodesr=   rï   Údefault_display_pos_attrrÀ   r2  rF  Únodes_with_shapeÚpositionrG  r;   r¹   r’   rD  r²   Údefault_dictÚlblÚlbl_textr   rK   rÆ   Úvisible_edgesr>   Úcollection_edgesÚnon_collection_edgesÚurû   Úedge_positionÚedge_collectionÚfancy_arrowsrÉ   Úedge_label_datarG   Úconnectionstyle_objrc   r‡   Ú	path_datarü   r  r  r  r9   rý   r„   rÐ   r,  r0  s<    ``                                               @@@@@@@@@@r    r   r     sÀ  ÿû€ õ\ $ãÝ#Ûð*Ø�Dð*à˜ð*ð 	�ið*ð 	�Sð	*ð
 	ØØØ"ØØØØØñ	
ð*ð 	�cð*ð  	�cð!*ð" 	˜Sð#*ð$ 	˜Vð%*ð& 	˜ð'*ð( 	�cð)*ð* 	�ið+*ð, 	ØØØ"ØØØ!(°ÀÑWØØØØñ
ð-*ðD 	�cðE*ðF 	�cðG*ðH 	 A§M¡M¤O™5¸ðI*ðJ 	 §¡¤™"°QðK*ðL !ØØØòS*€HðZ ò ˆØ˜Ò Ü×"Ñ"Ø?À¸wÐGóð ðð €~Ø—‘“ˆà‡z�z�, ¨Ñ 6Ô7Ø×ÑØØØØØØð 	ô 	
öHõ4?ô2
öHö,9÷&4ð 4ö*($ôT%÷%
ò %
ôNÔ-¨s¯x©x¯}©}ô ð —:‘:˜n¨iÓ8€LÜ�,¤Ô%ÙØŸG™G›I‰Mà‰Mô ×0Ñ0°°LÀ$ÓG×MÑMÓO÷
Ù�!�QÒSTŠAð
ˆñ 
ð —J‘J˜}Ó-€Mð �*‰*�Z Ó
'€CàBÐÜ�„}Ü
×ÑØ™3˜}Ó-Ð/Gô	
ð 'ˆØ5ˆˆzÒÜ	×	Ñ	  3Ó	'¨2Ò	-Ü
×ÑØœ2×+Ñ+¨MÓ:Ð<Tô	
ð 'ˆØ5ˆˆzÑô ˆ=Ó˜AÓØ—Z‘Z ¨gÓ6ˆ
ÙÜ×"Ñ"Ø˜z¨8°LÑ+Aóç‰f‹hó
ó 3	ˆEð *×/Ñ/°ZÐ/Ó@÷ á�A�qØ˜’: ! )°¸À,Ñ9OÒ0Oò ð Ðñ  ð —z‘zÑ"8Ð9IÈ5Ó"QÓRˆHØ—J‘Jô !$Ù.Ð/?ÀÓIÙ.Ð/?ÀÓIó!÷á˜˜1ñ # 1 aÕ(óóˆEð Ÿ:™:ô !*Ð*:Ó ;÷ñ ˜˜1ñ "/Ø !Ø .Ø %ó"ð ˜Að "ò"ñ ð # 1™Xñ	&óóˆLð" �N‰NØš˜A˜‘Øš˜A˜‘Ù(Ð)9¸6ÓBØØÙ1Ð2BÀNÓSØ'Øð ö 	ðU3	ðl —‘˜L¨'Ó2€JàÑ *°EÒ"9ØˆÜ�j¤$Ô'Ø%ˆLØˆJà#×)Ñ)¨zÐ)Ó:ó 	‰FˆAˆsØ�e‰|Øô ˜c¤4Ô(Ø s ¡¸AÐ>�à—w‘w˜w¨Ó*ˆHÜ˜h¬Ô,Ü˜x›=�à�J‰J�|Ô$Ø ×&Ñ& qÑ)¨#Ñ.‰DˆAˆqØ�K‰KØØØØ—W‘W˜V X¨lÑ%;¸FÑ%CÓDØ—g‘g˜g x°Ñ'=¸gÑ'FÓGØ—w‘w˜x¨°,Ñ)?ÀÑ)IÓJØ—w‘w˜x¨°,Ñ)?ÀÑ)IÓJØ$'§G¡GØ˜x¨Ñ5°iÑ@ó%ð #&§'¡'¨)°X¸lÑ5KÈIÑ5VÓ"WØ ×*Ñ*Ø—W‘W˜V X¨lÑ%;¸FÑ%CÓDð ö ð	ð@ —:‘:˜n¨iÓ8€LÜ�,¤Ô%ÙØŸG™G›I‰Mà‰Mô ×0Ñ0°°LÀ$ÓG×MÑMÓO÷
Ù�!�QÒSTŠAð
ˆñ 
ð —O‘O MÓ2€MÜ×ÑØ”r×-Ñ-¨m¸SÓAÈõð ×&Ñ&Ô(ð "×'Ñ'¨TÐ'Ó2ÖOˆqÑ6KÈAÕ6NŠÓOà&×,Ñ,Ó.ÖK�AÑ2GÈÕ2JŠaÒKð ð ×&Ñ&Ô(ð "×'Ñ'¨TÐ'Ó2ÖSˆqÑ:OÐPQÕ:RŠÓSà&×,Ñ,Ó.ÖO�AÑ6KÈAÕ6NŠaÒOð ð
 —J‘Jð -÷	
ð 	
ð
 ��1�qñ ˜a ¸$Ô?Ù˜a ¸$Ô?òô	
ó€Mô ÐÓ˜qÒ ØŸ/™/×8Ñ8ØÙ)Ð*:¸GÓDÙ-Ð.>ÀÓHÙ,Ð-=¸wÓGÙ(Ð)9¸7ÓCØØð 9ó 
ˆð 	×Ñ˜oÔ.à€LÜ
ÐÓ  1Ò$Ø%ò 	.ˆAá/°Ó2ˆL˜‰OØ×Ñ˜\¨!™_Õ-ð	.ð —‘˜L¨'Ó2€JØ€LÜ�*œdÔ#Ø!ˆàˆ
ð
 ×&Ñ&Ô(ð 	×Ñ °$ÐÔ7à× Ñ  jÐ Ó1ð ð
 Ñ *°EÒ"9Ø&ó E	‰GˆQ�Ü�a“ˆAà�e‰|˜s˜{Øä˜c¤4Ô(Ø �n�à�J‰J�|Ô$Ø—w‘w˜wÓ'ˆHÜ˜h¬Ô,Ü˜x›=�ð
-Ø$ Q™�ð �‰t�q˜‘t‹|à&+×&?Ñ&?Ó&AÐ#Ø×'Ñ'×1Ñ1°-×2EÑ2EÀaÈÁdÑ2KÈCÑ2PÓQ�Ù/°°dÓ;�	Ø"×,Ñ,×5Ñ5Ó7×FÑFÀyÓQ�	Ø ×)Ñ)¨!Ñ,‘��1Ø—‘ØØØØŸ™ ¨°,Ñ)?ÀÑ)GÓHØŸ'™' '¨8°LÑ+AÀ'Ñ+JÓKØŸ7™7 8¨X°lÑ-CÀHÑ-MÓNØŸ7™7 8¨X°lÑ-CÀHÑ-MÓNØŸ'™' '¨8°LÑ+AÀ'Ñ+JÓKØ(+¯©Ø! 8¨LÑ#9¸)Ñ#Dó)ð '*§g¡gØ! 8¨LÑ#9¸)Ñ#Dó'ð Ø$×.Ñ.ØŸ™ ¨°,Ñ)?ÀÑ)GÓHØð% ô ñ( áØØØ—W‘W˜V X¨lÑ%;¸FÑ%CÓDØ—g‘g˜g x°Ñ'=¸gÑ'FÓGØ—w‘w˜x¨°,Ñ)?ÀÑ)IÓJØ—w‘w˜x¨°,Ñ)?ÀÑ)IÓJØ—g‘g˜g x°Ñ'=¸gÑ'FÓGØ—W‘W˜V X¨lÑ%;¸FÑ%CÓDØ$'§G¡GØ˜x¨Ñ5°iÑ@ó%ð #&§'¡'¨)°X¸lÑ5KÈIÑ5VÓ"WØŸ'™' %¨°,Ñ)?ÀÑ)FÓGØ"%§'¡'¨(°H¸\Ñ4JÈ8Ñ4TÓ"UØ ×*Ñ*ØØ÷#ðgE	ðP Ð&Ò&Ü
×!Ñ! !Ð%=Ô>à€HùóY
ùóD ùóùóùóV
ùò 	PùâKùò 	TùâOùô	
øô~ ò -Ù)¨!Ó,“ð-úsr   Æ>
kÇ	kËk$Ì5k*Í) k0Ö%
k6Ö0k6Øk<Ø&k<Ø?lÙlÙ8lÚlÚlÚ-lÛ lálìl,ì+l,c                 óL  — ddl m} |€|j                  «       }n|j                  «       }|j	                  d«       |€.|j
                  r|j                  «       }n|j                  d«      }d|vrd|v |d<   t        | f||dœ|¤Ž |j                  «        |j                  «        y)aI  Draw the graph G with Matplotlib.

    Draw the graph as a simple representation with no node
    labels or edge labels and using the full Matplotlib figure area
    and no axis labels by default.  See draw_networkx() for more
    full-featured drawing that allows title, axis labels etc.

    Parameters
    ----------
    G : graph
        A networkx graph

    pos : dictionary, optional
        A dictionary with nodes as keys and positions as values.
        If not specified a spring layout positioning will be computed.
        See :py:mod:`networkx.drawing.layout` for functions that
        compute node positions.

    ax : Matplotlib Axes object, optional
        Draw the graph in specified Matplotlib axes.

    kwds : optional keywords
        See networkx.draw_networkx() for a description of optional keywords.

    Examples
    --------
    >>> G = nx.dodecahedral_graph()
    >>> nx.draw(G)
    >>> nx.draw(G, pos=nx.spring_layout(G))  # use spring layout

    See Also
    --------
    draw_networkx
    draw_networkx_nodes
    draw_networkx_edges
    draw_networkx_labels
    draw_networkx_edge_labels

    Notes
    -----
    This function has the same name as pylab.draw and pyplot.draw
    so beware when using `from networkx import *`

    since you might overwrite the pylab.draw function.

    With pyplot use

    >>> import matplotlib.pyplot as plt
    >>> G = nx.dodecahedral_graph()
    >>> nx.draw(G)  # networkx draw()
    >>> plt.draw()  # pyplot draw()

    Also see the NetworkX drawing examples at
    https://networkx.org/documentation/latest/auto_examples/index.html
    r   NÚw)r   r   rU   rU   Úwith_labelsÚlabels)rÐ   rD   )rQ  rR  ÚgcfÚ
get_figureÚset_facecolorÚaxesrI   Úadd_axesr   Úset_axis_offÚdraw_if_interactive)r3   rÐ   rD   ÚkwdsrH   Úcfs         r    r   r   C  sš   € õr $à	€zØ�W‰W‹Y‰à�]‰]‹_ˆØ×Ñ�SÔØ	€zØ�7Š7Ø—‘“‰Bà—‘˜\Ó*ˆBà˜DÑ Ø&¨$Ð.ˆˆ]Ñä�!Ð,˜ Ñ, tÒ,Ø‡O�OÔØ×ÑÔØ
r&   c                 ór  ‡— ddl m} ddlm}  |t        «      j
                  j                  «       } |t        «      j
                  j                  «       } |t        «      j
                  j                  «       }	||z  |	z  h d£z
  Št        ˆfd„|D «       «      r2dj                  |D �
cg c]	  }
|
‰vsŒ|
‘Œ c}
«      }t        d|› �«      ‚|j                  «       D �
�ci c]  \  }
}|
|v sŒ|
|“Œ }}
}|j                  «       D �
�ci c]  \  }
}|
|v sŒ|
|“Œ }}
}|j                  «       D �
�ci c]  \  }
}|
|	v sŒ|
|“Œ }}
}|€t        j                  j                  | «      }t	        | |fi |¤Ž t        | |fd|i|¤Ž |rt        | |fi |¤Ž |j!                  «        yc c}
w c c}}
w c c}}
w c c}}
w )	aC  Draw the graph G using Matplotlib.

    Draw the graph with Matplotlib with options for node positions,
    labeling, titles, and many other drawing features.
    See draw() for simple drawing without labels or axes.

    Parameters
    ----------
    G : graph
        A networkx graph

    pos : dictionary, optional
        A dictionary with nodes as keys and positions as values.
        If not specified a spring layout positioning will be computed.
        See :py:mod:`networkx.drawing.layout` for functions that
        compute node positions.

    arrows : bool or None, optional (default=None)
        If `None`, directed graphs draw arrowheads with
        `~matplotlib.patches.FancyArrowPatch`, while undirected graphs draw edges
        via `~matplotlib.collections.LineCollection` for speed.
        If `True`, draw arrowheads with FancyArrowPatches (bendable and stylish).
        If `False`, draw edges using LineCollection (linear and fast).
        For directed graphs, if True draw arrowheads.
        Note: Arrows will be the same color as edges.

    arrowstyle : str (default='-\|>' for directed graphs)
        For directed graphs, choose the style of the arrowsheads.
        For undirected graphs default to '-'

        See `matplotlib.patches.ArrowStyle` for more options.

    arrowsize : int or list (default=10)
        For directed graphs, choose the size of the arrow head's length and
        width. A list of values can be passed in to assign a different size for arrow head's length and width.
        See `matplotlib.patches.FancyArrowPatch` for attribute `mutation_scale`
        for more info.

    with_labels :  bool (default=True)
        Set to True to draw labels on the nodes.

    ax : Matplotlib Axes object, optional
        Draw the graph in the specified Matplotlib axes.

    nodelist : list (default=list(G))
        Draw only specified nodes

    edgelist : list (default=list(G.edges()))
        Draw only specified edges

    node_size : scalar or array (default=300)
        Size of nodes.  If an array is specified it must be the
        same length as nodelist.

    node_color : color or array of colors (default='#1f78b4')
        Node color. Can be a single color or a sequence of colors with the same
        length as nodelist. Color can be string or rgb (or rgba) tuple of
        floats from 0-1. If numeric values are specified they will be
        mapped to colors using the cmap and vmin,vmax parameters. See
        matplotlib.scatter for more details.

    node_shape :  string (default='o')
        The shape of the node.  Specification is as matplotlib.scatter
        marker, one of 'so^>v<dph8'.

    alpha : float or None (default=None)
        The node and edge transparency

    cmap : Matplotlib colormap, optional
        Colormap for mapping intensities of nodes

    vmin,vmax : float, optional
        Minimum and maximum for node colormap scaling

    linewidths : scalar or sequence (default=1.0)
        Line width of symbol border

    width : float or array of floats (default=1.0)
        Line width of edges

    edge_color : color or array of colors (default='k')
        Edge color. Can be a single color or a sequence of colors with the same
        length as edgelist. Color can be string or rgb (or rgba) tuple of
        floats from 0-1. If numeric values are specified they will be
        mapped to colors using the edge_cmap and edge_vmin,edge_vmax parameters.

    edge_cmap : Matplotlib colormap, optional
        Colormap for mapping intensities of edges

    edge_vmin,edge_vmax : floats, optional
        Minimum and maximum for edge colormap scaling

    style : string (default=solid line)
        Edge line style e.g.: '-', '--', '-.', ':'
        or words like 'solid' or 'dashed'.
        (See `matplotlib.patches.FancyArrowPatch`: `linestyle`)

    labels : dictionary (default=None)
        Node labels in a dictionary of text labels keyed by node

    font_size : int (default=12 for nodes, 10 for edges)
        Font size for text labels

    font_color : color (default='k' black)
        Font color string. Color can be string or rgb (or rgba) tuple of
        floats from 0-1.

    font_weight : string (default='normal')
        Font weight

    font_family : string (default='sans-serif')
        Font family

    label : string, optional
        Label for graph legend

    hide_ticks : bool, optional
        Hide ticks of axes. When `True` (the default), ticks and ticklabels
        are removed from the axes. To set ticks and tick labels to the pyplot default,
        use ``hide_ticks=False``.

    kwds : optional keywords
        See networkx.draw_networkx_nodes(), networkx.draw_networkx_edges(), and
        networkx.draw_networkx_labels() for a description of optional keywords.

    Notes
    -----
    For directed graphs, arrows  are drawn at the head end.  Arrows can be
    turned off with keyword arrows=False.

    Examples
    --------
    >>> G = nx.dodecahedral_graph()
    >>> nx.draw(G)
    >>> nx.draw(G, pos=nx.spring_layout(G))  # use spring layout

    >>> import matplotlib.pyplot as plt
    >>> limits = plt.axis("off")  # turn off axis

    Also see the NetworkX drawing examples at
    https://networkx.org/documentation/latest/auto_examples/index.html

    See Also
    --------
    draw
    draw_networkx_nodes
    draw_networkx_edges
    draw_networkx_labels
    draw_networkx_edge_labels
    r   )Ú	signatureN>   r3   rÐ   Úarrowsrx  c              3   ó&   •K  — | ]  }|‰v–— Œ
 y ­wr   rì   )r   rî   Ú
valid_kwdss     €r    r!   z draw_networkx.<locals>.<genexpr>=  s   øè ø€ Ò
- 1ˆ1�JÔÑ
-ùs   ƒz, zReceived invalid argument(s): r…  )Úinspectr„  rQ  rR  r   Ú
parametersr   r	   r
   rö   Újoinr]   r÷   r0   ÚdrawingrY  r€  )r3   rÐ   r…  rx  r�  r„  rH   Úvalid_node_kwdsÚvalid_edge_kwdsÚvalid_label_kwdsrî   Úinvalid_argsrï   Ú	node_kwdsÚ	edge_kwdsÚ
label_kwdsr‡  s                   @r    r   r   ’  s¢  ø€ õn "å#ñ
  Ô 3Ó4×?Ñ?×DÑDÓF€OÙÔ 3Ó4×?Ñ?×DÑDÓF€OÙ Ô!5Ó6×AÑA×FÑFÓHÐð " OÑ3Ð6FÑFò Kñ €Jô Ó
-¨Ô
-Ô-Ø—y‘y¨TÖ!I¨°Q¸jÒ5H¢!Ò!IÓJˆÜÐ9¸,¸ÐHÓIÐIà"&§*¡*£,×G™$˜!˜Q°!°Ò2F��A‘ÐG€IÑGØ"&§*¡*£,×G™$˜!˜Q°!°Ò2F��A‘ÐG€IÑGØ#'§:¡:£<×I™4˜1˜a°1Ð8HÒ3H�!�Q‘$ÐI€JÑIà
€{Ü�j‰j×&Ñ& qÓ)ˆä˜˜3Ñ, )Ò,Ü˜˜3Ñ; vÐ;°Ò;ÙÜ˜Q Ñ2 zÒ2Ø×ÑÕùò "Jùó HùÛGùÛIs0   Â*	F"Â4F"Ã F'Ã-F'ÄF-ÄF-Ä0F3Ä=F3c                 óÜ  — ddl m} ddl}ddl}ddlm} ddl}|
€|j                  «       }
|€t        | «      }t        |«      dk(  r|j                  j                  d«      S 	 |j                  |D �cg c]  }||   ‘Œ	 c}«      }t!        ||«      rt#        ||||||	«      }d}t!        ||j$                  «      sBt!        |t        «      s2|j'                  t)        t        |«      «      D �cg c]  }|‘Œ c}«      }n!t!        |t        «      r|j                  |«      }|j+                  |«      D ]/  }|
j-                  |||k(  df   |||k(  df   ||||||	||||¬«      }Œ1 |r|
j/                  ddd	d	d	d	¬
«       |�-t!        ||«      r |
j0                  |Ž  n|
j1                  |«       j3                  d«       |S c c}w # t        $ r}t        j                  d|› d�«      |‚d}~ww xY wc c}w )aö  Draw the nodes of the graph G.

    This draws only the nodes of the graph G.

    Parameters
    ----------
    G : graph
        A networkx graph

    pos : dictionary
        A dictionary with nodes as keys and positions as values.
        Positions should be sequences of length 2.

    ax : Matplotlib Axes object, optional
        Draw the graph in the specified Matplotlib axes.

    nodelist : list (default list(G))
        Draw only specified nodes

    node_size : scalar or array (default=300)
        Size of nodes.  If an array it must be the same length as nodelist.

    node_color : color or array of colors (default='#1f78b4')
        Node color. Can be a single color or a sequence of colors with the same
        length as nodelist. Color can be string or rgb (or rgba) tuple of
        floats from 0-1. If numeric values are specified they will be
        mapped to colors using the cmap and vmin,vmax parameters. See
        matplotlib.scatter for more details.

    node_shape :  string (default='o')
        The shape of the node.  Specification is as matplotlib.scatter
        marker, one of 'so^>v<dph8'.

    alpha : float or array of floats (default=None)
        The node transparency.  This can be a single alpha value,
        in which case it will be applied to all the nodes of color. Otherwise,
        if it is an array, the elements of alpha will be applied to the colors
        in order (cycling through alpha multiple times if necessary).

    cmap : Matplotlib colormap (default=None)
        Colormap for mapping intensities of nodes

    vmin,vmax : floats or None (default=None)
        Minimum and maximum for node colormap scaling

    linewidths : [None | scalar | sequence] (default=1.0)
        Line width of symbol border

    edgecolors : [None | scalar | sequence] (default = node_color)
        Colors of node borders. Can be a single color or a sequence of colors with the
        same length as nodelist. Color can be string or rgb (or rgba) tuple of floats
        from 0-1. If numeric values are specified they will be mapped to colors
        using the cmap and vmin,vmax parameters. See `~matplotlib.pyplot.scatter` for more details.

    label : [None | string]
        Label for legend

    margins : float or 2-tuple, optional
        Sets the padding for axis autoscaling. Increase margin to prevent
        clipping for nodes that are near the edges of an image. Values should
        be in the range ``[0, 1]``. See :meth:`matplotlib.axes.Axes.margins`
        for details. The default is `None`, which uses the Matplotlib default.

    hide_ticks : bool, optional
        Hide ticks of axes. When `True` (the default), ticks and ticklabels
        are removed from the axes. To set ticks and tick labels to the pyplot default,
        use ``hide_ticks=False``.

    Returns
    -------
    matplotlib.collections.PathCollection
        `PathCollection` of the nodes.

    Examples
    --------
    >>> G = nx.dodecahedral_graph()
    >>> nodes = nx.draw_networkx_nodes(G, pos=nx.spring_layout(G))

    Also see the NetworkX drawing examples at
    https://networkx.org/documentation/latest/auto_examples/index.html

    See Also
    --------
    draw
    draw_networkx
    draw_networkx_edges
    draw_networkx_labels
    draw_networkx_edge_labels
    r   )ÚIterableNzNode z has no position.rU   )
rF  rG  r/  r   r7   r8   r¼   rH  rI  rJ  rÞ   Frß   rh   )Úcollections.abcr”  r'   Úmatplotlib.collectionsrQ  rR  rk   rI   Úlistry   rP  ÚPathCollectionr#  ra  r0   rô   rm   Úapply_alphaÚndarrayr%  rx   Úuniquer[  rT  ÚmarginsÚ
set_zorder)r3   rÐ   Únodelistr°   r®   rÀ   r¼   r   r7   r8   rD   rH  rI  rJ  rœ  rÝ   r”  r9   r'   rH   r„   rï   ÚxyÚerrrû   r2  Únode_collections                              r    r   r   O  sü  € õV )ãÛ!Ý#Ûà	€zØ�W‰W‹YˆàÐÜ˜“7ˆä
ˆ8ƒ}˜ÒØ�‰×-Ñ-¨dÓ3Ð3ðHØ�Z‰Z¨Ö2 A˜˜Q›Ò2Ó3ˆô �%˜Ô"Ü  ¨U°H¸dÀDÈ$ÓOˆ
Øˆä�j "§*¡*Ô-´jÀÌTÔ6RØ—X‘X´5¼¸X»Ó3GÖH¨ašzÒHÓI‰
Ü	�J¤Ô	%Ø—Z‘Z 
Ó+ˆ
à—‘˜:Ó&ò 
ˆØŸ*™*Øˆz˜UÑ" AÐ%Ñ&Øˆz˜UÑ" AÐ%Ñ&ØØØØØØØØ!Ø!Øð %ó 
‰ð
ñ Ø
�‰ØØØØØØð 	ô 	
ð ÐÜ�g˜xÔ(ØˆB�J‰J˜Ò à�J‰J�wÔà×Ñ˜qÔ!ØÐùò[ 3øÜò HÜ×Ñ  s eÐ+<Ð=Ó>ÀCÐGûðHüò Is0   Á"F> Á1F9Á=F> Ã)	G)Æ9F> Æ>	G&ÇG!Ç!G&c                   óN   — e Zd ZdZ G d„ d«      Z	 	 	 	 	 	 	 	 	 	 	 dd„Zd„ Zd„ Zy)	ÚFancyArrowFactoryz5Draw arrows with `matplotlib.patches.FancyarrowPatch`c                   ó    — e Zd Zdd„Zd„ Zd„ Zy)ú(FancyArrowFactory.ConnectionStyleFactoryNc                 óî   — dd l }dd l}dd l}|| _        || _        || _        |D �cg c]  }|j                  j                  |«      ‘Œ c}| _        t        | j                  «      | _
        || _        y c c}w ©Nr   )r'   Úmatplotlib.pathrk   rD   r9   r„   rn   ro   Úbase_connection_stylesry   r=   Úselfloop_height)rP   Úconnectionstylesrª  rD   r9   r'   r„   Úcss           r    rN   z1FancyArrowFactory.ConnectionStyleFactory.__init__ÿ  sh   € Û$Û"ÛàˆDŒGØˆDŒHØˆDŒGà:Jö+Ø46�—‘×+Ñ+¨BÕ/ò+ˆDÔ'ô ˜×4Ñ4Ó5ˆDŒFØ#2ˆDÕ ùò	+s   ¦"A2c                 ó:   — | j                   || j                  z     S r   )r©  r=   )rP   r*  s     r    Úcurvedz/FancyArrowFactory.ConnectionStyleFactory.curved  s   € Ø×.Ñ.¨z¸D¿F¹FÑ/BÑCÐCr&   c                 ó   ‡ ‡— ˆˆ fd„}|S )Nc           
      óž  •— ‰j                   j                  | |k(  «      st        j                  d«      ‚‰j                  j
                  j                  «       j                  | «      }d‰j                  z  }|dz  }‰j                   j                  d|g||g|dgddg| dg| |gd|gg«      }‰dz  rN|j                  \  }}	t        ‰dz  «      D ]  }
|	| }	}Œ	 ‰j                   j                  ||	g«      j                  }‰j                  j                  j                  ‰j                  j
                  j                  ||z   «      g d¢«      S )Nr  gš™™™™™¹?rA   r   r  r   )r„   r!  r0   rô   rD   r[   rƒ   r_   rª  r#  r$  rx   r%  r9   rz   r{   )rc   rd   rQ   rR   r&  r'  r(  rz   r   rK   rû   r*  rP   s              €€r    r+  zPFancyArrowFactory.ConnectionStyleFactory.self_loop.<locals>.self_loop_connection  sL  ø€ Ø—w‘w—{‘{ 4¨4¡<Ô0Ü×*Ñ*ð<óð ð  Ÿ7™7×,Ñ,×5Ñ5Ó7×AÑAÀ$ÓG�Ø × 4Ñ 4Ñ4�Ø! C™-�à—w‘w—‘ð ˜G˜à  'Ð*Ø  !˜Ø˜A˜à!˜ 1˜Ø!˜ 7Ð+Ø˜G˜ðó�ð   ’>ØŸ6™6‘D�A�qÜ" :°¡>Ó2ò %˜Ø  1 "˜1™ð%àŸ7™7Ÿ=™=¨!¨Q¨Ó0×2Ñ2�DØ—x‘x—}‘}×)Ñ)Ø—G‘G×%Ñ%×/Ñ/°¸4±Ó@ÒBWóð r&   rì   )rP   r*  r+  s   `` r    r,  z2FancyArrowFactory.ConnectionStyleFactory.self_loop  s   ù€ õ#ðJ (Ð'r&   r   )r¦   r§   r¨   rN   r®  r,  rì   r&   r    ÚConnectionStyleFactoryr¥  þ  s   „ ó	3ò	Dó&	(r&   r±  Nc                 óv  — dd l }dd l}dd lm} dd l}t        |t        «      r|g}n4|j                  |«      rt        |«      }nd}t        j                  |«      ‚|| _        || _        || _        || _        || _        || _        || _        || _        || _        || _        || _        | j-                  |||«      | _        |	| _        |
| _        |j4                  j6                  j9                  ||«      | _        || _        || _        t        |
t        «      r#tA        |
«      tA        |«      k7  rtC        d«      ‚y y )Nr   zDConnectionStyleFactory arg `connectionstyle` must be str or iterablez1arrowsize should have the same length as edgelist)"r'   Úmatplotlib.patchesrQ  rR  rk   rm   r  Úiterabler—  r0   rô   rD   r9   r„   Úedge_posÚedgelistrž  rÀ   Úmin_source_marginÚmin_target_marginÚedge_indicesr°   r±  Úconnectionstyle_factoryr	  r5  r  r  Úto_rgba_arrayÚarrow_colorsr8  r3  ry   r]   )rP   rµ  r¶  rž  r¹  r°   rª  r6  rÀ   r	  r5  rÈ   r¼   r8  r3  r·  r¸  rD   r9   r'   rH   r„   r‘   s                          r    rN   zFancyArrowFactory.__init__8  s$  € ó( 	!Û!Ý'Ûä�o¤sÔ+Ø.Ð/‰OØ�[‰[˜Ô)Ü" ?Ó3‰OàXˆCÜ×"Ñ" 3Ó'Ð'ØˆŒØˆŒØˆŒØ ˆŒØ ˆŒØ ˆŒØ$ˆŒØ!2ˆÔØ!2ˆÔØ(ˆÔØ"ˆŒØ'+×'BÑ'BØ˜_¨bó(
ˆÔ$ð %ˆŒØ"ˆŒØŸJ™J×5Ñ5×CÑCÀJÐPUÓVˆÔØ"ˆŒØˆŒ
Ü�i¤Ô&¬3¨y«>¼SÀ»]Ò+JÜÐPÓQÐQð ,KÐ&r&   c                 óÖ	  — | j                   |   \  \  }}\  }}d}d}| j                  j                  | j                  «      rDt	        | j                  t
        «      s*t	        | j                  t        «      s| j                  |   }n| j                  }| j                  j                  | j                  «      rDt	        | j                  t
        «      s*t	        | j                  t        «      s| j                  |   }	n| j                  }	| j                  j                  | j                  «      rž| j                  |   d d \  }
}| j                  | j                  j                  |
«         }| j                  | j                  j                  |«         }| j                  || j                  «      }| j                  || j                  «      }n(| j                  | j                  | j                  «      }|}t        ||«      }t        ||	«      }t	        | j                  t         «      r| j                  |   }n| j                  }t#        | j$                  «      |kD  r| j$                  |   }nMt#        | j$                  «      dk(  r| j$                  d   }n%| j$                  |t#        | j$                  «      z     }| j                  j                  | j&                  «      rNt#        | j&                  «      |kD  r| j&                  |   }n2| j&                  |t#        | j&                  «      z     }n| j&                  }| j                  j                  | j(                  «      r‚t	        | j(                  t
        «      sht	        | j(                  t        «      sNt#        | j(                  «      |kD  r| j(                  |   }n2| j(                  |t#        | j(                  «      z     }n| j(                  }||k(  r.||k(  r)| j*                  j-                  | j.                  |   «      }n(| j*                  j1                  | j.                  |   «      }| j                  j                  | j2                  «      rDt	        | j2                  t
        «      s*t	        | j2                  t        «      s| j2                  |   }n| j2                  }| j4                  j6                  j9                  ||f||f||||||||d¬«      S )Nr   rh   rU   )	r	  rX   rY   r9  r¹   r8  r6  r7  r:  )rµ  r„   r´  r·  rm   r  r"   r¸  r°   r¶  rž  Úindexr0  rÀ   r,   r5  r—  ry   r¼  r8  r3  rº  r,  r¹  r®  r	  r9   rn   r;  )rP   r’   r‹   rŒ   r�   r�   Úshrink_sourceÚshrink_targetr·  r¸  ÚsourceÚtargetÚsource_node_sizeÚtarget_node_sizer9  Úarrow_colorr8  r7  r6  r	  s                       r    Ú__call__zFancyArrowFactory.__call__n  sì  € Ø!Ÿ]™]¨1Ñ-Ñ‰ˆˆR‘(�2�rØˆØˆà�G‰G×Ñ˜T×3Ñ3Ô4Ü˜t×5Ñ5´sÔ;Ü˜t×5Ñ5´uÔ=à $× 6Ñ 6°qÑ 9Ñà $× 6Ñ 6Ðð �G‰G×Ñ˜T×3Ñ3Ô4Ü˜t×5Ñ5´sÔ;Ü˜t×5Ñ5´uÔ=à $× 6Ñ 6°qÑ 9Ñà $× 6Ñ 6Ðà�7‰7×Ñ˜DŸN™NÔ+Ø!Ÿ]™]¨1Ñ-¨b¨qÐ1‰NˆF�FØ#Ÿ~™~¨d¯m©m×.AÑ.AÀ&Ó.IÑJÐØ#Ÿ~™~¨d¯m©m×.AÑ.AÀ&Ó.IÑJÐØ ×/Ñ/Ð0@À$Ç/Á/ÓRˆMØ ×/Ñ/Ð0@À$Ç/Á/ÓR‰Mà ×/Ñ/°·±ÀÇÁÓPˆMØ)ˆMÜ˜MÐ+<Ó=ˆÜ˜MÐ+<Ó=ˆô �d—n‘n¤dÔ+Ø!Ÿ^™^¨AÑ.‰Nà!Ÿ^™^ˆNäˆt× Ñ Ó! AÒ%Ø×+Ñ+¨AÑ.‰KÜ�×"Ñ"Ó# qÒ(Ø×+Ñ+¨AÑ.‰Kà×+Ñ+¨A´°D×4EÑ4EÓ0FÑ,FÑGˆKà�7‰7×Ñ˜DŸN™NÔ+Ü�4—>‘>Ó" QÒ&Ø ŸN™N¨1Ñ-‘	à ŸN™N¨1¬s°4·>±>Ó/BÑ+BÑC‘	àŸ™ˆIð �G‰G×Ñ˜TŸZ™ZÔ(Ü˜tŸz™z¬3Ô/Ü˜tŸz™z¬5Ô1ä�4—:‘:‹ Ò"Ø ŸJ™J q™M‘	à ŸJ™J q¬3¨t¯z©z«?Ñ':Ñ;‘	àŸ
™
ˆIà�Š8˜˜bšØ"×:Ñ:×DÑDØ×!Ñ! !Ñ$ó‰Oð #×:Ñ:×AÑAÀ$×BSÑBSÐTUÑBVÓWˆOð �G‰G×Ñ˜TŸ_™_Ô-Ü˜tŸ™´Ô4Ü˜tŸ™´Ô6àŸ™¨Ñ+‰JàŸ™ˆJà�x‰x×Ñ×/Ñ/Ø�ˆHØ�ˆHØ!Ø!Ø!Ø)ØØØ+ØØð 0ó 
ð 	
r&   c                 óˆ   — |dv r!| j                   j                  d|z  «      dz  S | j                   j                  |«      dz  S r.  )r„   r"  )rP   Úmarker_sizer/  s      r    r0  z FancyArrowFactory.to_marker_edgeÏ  s>   € Ø�XÑØ—7‘7—<‘<  K¡Ó0°1Ñ4Ð4à—7‘7—<‘< Ó,¨qÑ0Ð0r&   )rÙ   rÁ   rÓ   rØ   rî   Nr¶   Úsolidr   r   N)r¦   r§   r¨   Ú__doc__r±  rN   rÆ  r0  rì   r&   r    r£  r£  û  sF   „ Ù?÷8(ñ 8(ðD ØØØØØØØØØØó%4Ròl_
óB1r&   r£  c                 ó(  — ddl }ddl}ddl}ddl}ddlm} ddl}|€$| j                  «       xs | j                  «        }nt        |t        «      st        d«      ‚| }t        |t        «      r|g}n4|j                  |«      rt        |«      }nd}t        j                   |«      ‚|rèd}|�'|j#                  |j%                  d«      t&        d¬«       |d	k7  r'|j#                  |j%                  d
«      t&        d¬«       |dk7  r'|j#                  |j%                  d«      t&        d¬«       |dk7  r'|j#                  |j%                  d«      t&        d¬«       t)        d„ |D «       «      r'|j#                  |j%                  d«      t&        d¬«       |€| j                  «       rdnd}|€|j+                  «       }|€t        | j,                  «      }t/        |«      r^| j                  «       r>t1        j2                  d„ «      }|D �cg c]  }t5        |t7        |dd «         «      ‘Œ }}ndgt/        |«      z  }ng S |€t        | j9                  «       «      }|€d}|j;                  |D �cg c]  }||d      ||d      f‘Œ c}«      } |j                  |«      rÊt/        |«      t/        | «      k(  r³|j=                  |D �!cg c]  }!t        |!t>        «      ‘Œ c}!«      r†|	�"t        |	|j@                  jB                  «      sJ ‚|jE                  «       }	|
€tG        |«      }
|€tI        |«      }|j@                  jK                  |
|¬«      }"|D �cg c]  } |	 |"|«      «      ‘Œ }}|jM                  |jO                  | dd…dd…df   «      «      }#|jQ                  |jO                  | dd…dd…df   «      «      }$|jM                  |jO                  | dd…dd…df   «      «      }%|jQ                  |jO                  | dd…dd…df   «      «      }&|$|#z
  }'|&|%z
  }(|(dk7  r|(n!d|jS                  |«      jI                  «       z  })tU        | |||||)|||||||||||¬«      }*|�r |j0                  jW                  | ||d||¬«      }+|+jY                  |	«       |+j[                  |
|«       |+j]                  d«       |+j_                  |«       |ja                  |+«       |+},t        jb                  | «      D �-cg c]	  }-|-|v sŒ|-‘Œ }.}-|.r£t        te        t6        |«      «      }/g }0|.D ]=  }-|/jg                  |-«      }1 |*|1«      }2|0ji                  |2«       |jk                  |2«       Œ? nEg },tm        t/        |«      «      D ],  }1 |*|1«      }2|jk                  |2«       |,ji                  |2«       Œ. d|'z  d|(z  }4}3|#|3z
  |%|4z
  f|$|3z   |&|4z   ff}5|jo                  |5«       |jq                  «        |r|js                  dddddd¬«       |,S c c}w c c}w c c}!w c c}w c c}-w )a÷  Draw the edges of the graph G.

    This draws only the edges of the graph G.

    Parameters
    ----------
    G : graph
        A networkx graph

    pos : dictionary
        A dictionary with nodes as keys and positions as values.
        Positions should be sequences of length 2.

    edgelist : collection of edge tuples (default=G.edges())
        Draw only specified edges

    width : float or array of floats (default=1.0)
        Line width of edges

    edge_color : color or array of colors (default='k')
        Edge color. Can be a single color or a sequence of colors with the same
        length as edgelist. Color can be string or rgb (or rgba) tuple of
        floats from 0-1. If numeric values are specified they will be
        mapped to colors using the edge_cmap and edge_vmin,edge_vmax parameters.

    style : string or array of strings (default='solid')
        Edge line style e.g.: '-', '--', '-.', ':'
        or words like 'solid' or 'dashed'.
        Can be a single style or a sequence of styles with the same
        length as the edge list.
        If less styles than edges are given the styles will cycle.
        If more styles than edges are given the styles will be used sequentially
        and not be exhausted.
        Also, `(offset, onoffseq)` tuples can be used as style instead of a strings.
        (See `matplotlib.patches.FancyArrowPatch`: `linestyle`)

    alpha : float or array of floats (default=None)
        The edge transparency.  This can be a single alpha value,
        in which case it will be applied to all specified edges. Otherwise,
        if it is an array, the elements of alpha will be applied to the colors
        in order (cycling through alpha multiple times if necessary).

    edge_cmap : Matplotlib colormap, optional
        Colormap for mapping intensities of edges

    edge_vmin,edge_vmax : floats, optional
        Minimum and maximum for edge colormap scaling

    ax : Matplotlib Axes object, optional
        Draw the graph in the specified Matplotlib axes.

    arrows : bool or None, optional (default=None)
        If `None`, directed graphs draw arrowheads with
        `~matplotlib.patches.FancyArrowPatch`, while undirected graphs draw edges
        via `~matplotlib.collections.LineCollection` for speed.
        If `True`, draw arrowheads with FancyArrowPatches (bendable and stylish).
        If `False`, draw edges using LineCollection (linear and fast).

        Note: Arrowheads will be the same color as edges.

    arrowstyle : str or list of strs (default='-\|>' for directed graphs)
        For directed graphs and `arrows==True` defaults to '-\|>',
        For undirected graphs default to '-'.

        See `matplotlib.patches.ArrowStyle` for more options.

    arrowsize : int or list of ints(default=10)
        For directed graphs, choose the size of the arrow head's length and
        width. See `matplotlib.patches.FancyArrowPatch` for attribute
        `mutation_scale` for more info.

    connectionstyle : string or iterable of strings (default="arc3")
        Pass the connectionstyle parameter to create curved arc of rounding
        radius rad. For example, connectionstyle='arc3,rad=0.2'.
        See `matplotlib.patches.ConnectionStyle` and
        `matplotlib.patches.FancyArrowPatch` for more info.
        If Iterable, index indicates i'th edge key of MultiGraph

    node_size : scalar or array (default=300)
        Size of nodes. Though the nodes are not drawn with this function, the
        node size is used in determining edge positioning.

    nodelist : list, optional (default=G.nodes())
       This provides the node order for the `node_size` array (if it is an array).

    node_shape :  string (default='o')
        The marker used for nodes, used in determining edge positioning.
        Specification is as a `matplotlib.markers` marker, e.g. one of 'so^>v<dph8'.

    label : None or string
        Label for legend

    min_source_margin : int or list of ints (default=0)
        The minimum margin (gap) at the beginning of the edge at the source.

    min_target_margin : int or list of ints (default=0)
        The minimum margin (gap) at the end of the edge at the target.

    hide_ticks : bool, optional
        Hide ticks of axes. When `True` (the default), ticks and ticklabels
        are removed from the axes. To set ticks and tick labels to the pyplot default,
        use ``hide_ticks=False``.

    Returns
    -------
     matplotlib.collections.LineCollection or a list of matplotlib.patches.FancyArrowPatch
        If ``arrows=True``, a list of FancyArrowPatches is returned.
        If ``arrows=False``, a LineCollection is returned.
        If ``arrows=None`` (the default), then a LineCollection is returned if
        `G` is undirected, otherwise returns a list of FancyArrowPatches.

    Notes
    -----
    For directed graphs, arrows are drawn at the head end.  Arrows can be
    turned off with keyword arrows=False or by passing an arrowstyle without
    an arrow on the end.

    Be sure to include `node_size` as a keyword argument; arrows are
    drawn considering the size of nodes.

    Self-loops are always drawn with `~matplotlib.patches.FancyArrowPatch`
    regardless of the value of `arrows` or whether `G` is directed.
    When ``arrows=False`` or ``arrows=None`` and `G` is undirected, the
    FancyArrowPatches corresponding to the self-loops are not explicitly
    returned. They should instead be accessed via the ``Axes.patches``
    attribute (see examples).

    Examples
    --------
    >>> G = nx.dodecahedral_graph()
    >>> edges = nx.draw_networkx_edges(G, pos=nx.spring_layout(G))

    >>> G = nx.DiGraph()
    >>> G.add_edges_from([(1, 2), (1, 3), (2, 3)])
    >>> arcs = nx.draw_networkx_edges(G, pos=nx.spring_layout(G))
    >>> alphas = [0.3, 0.4, 0.5]
    >>> for i, arc in enumerate(arcs):  # change alpha values of arcs
    ...     arc.set_alpha(alphas[i])

    The FancyArrowPatches corresponding to self-loops are not always
    returned, but can always be accessed via the ``patches`` attribute of the
    `matplotlib.Axes` object.

    >>> import matplotlib.pyplot as plt
    >>> fig, ax = plt.subplots()
    >>> G = nx.Graph([(0, 1), (0, 0)])  # Self-loop at node 0
    >>> edge_collection = nx.draw_networkx_edges(G, pos=nx.circular_layout(G), ax=ax)
    >>> self_loop_fap = ax.patches[0]

    Also see the NetworkX drawing examples at
    https://networkx.org/documentation/latest/auto_examples/index.html

    See Also
    --------
    draw
    draw_networkx
    draw_networkx_nodes
    draw_networkx_labels
    draw_networkx_edge_labels

    r   Nz.Argument `arrows` must be of type bool or NonezAdraw_networkx_edges arg `connectionstyle` must be str or iterablea  

The {0} keyword argument is not applicable when drawing edges
with LineCollection.

To make this warning go away, either specify `arrows=True` to
force FancyArrowPatches or use the default values.
Note that using FancyArrowPatches may be slow for large graphs.
r	  rh   )ÚcategoryÚ
stacklevelrØ   r5  r·  r¸  c              3   ó&   K  — | ]	  }|d k7  –— Œ y­w)rÙ   Nrì   )r   r¬  s     r    r!   z&draw_networkx_edges.<locals>.<genexpr>Á  s   è ø€ Ò6 ˆr�V�|Ñ6ùs   ‚r6  rÖ   rÓ   c                  ó,   — t        j                  d«      S r§  ©Ú	itertoolsÚcountrì   r&   r    ú<lambda>z%draw_networkx_edges.<locals>.<lambda>Ò  s   € ¼	¿¹ÈÓ8J€ r&   rî   rU   )r7   r8   ç{®Gázt?©rD   rN  )r  rH  rO  r7  r¼   gš™™™™™©?rÞ   Frß   ):Úwarningsr'   r–  Úmatplotlib.colorsrQ  rR  rk   rS  r)   rm   rW  rv   r  r´  r—  r0   rô   ÚwarnÚformatÚUserWarningrö   rI   r*   ry   rP  ÚdefaultdictÚnextr"   r(   r#  r!  r   r  ÚColormapÚget_cmapr+   r,   Ú	NormalizeÚaminÚravelÚamaxr%  r£  r^  Úset_cmapr/   r�  Ú	set_labelr_  Úselfloop_edgesr6   r¾  Úappendr`  rx   Úupdate_datalimÚautoscale_viewrT  )6r3   rÐ   r¶  r4  rÈ   r3  r¼   r	  r5  Ú	edge_cmapÚ	edge_vminÚ	edge_vmaxrD   r…  rJ  r°   rž  rÀ   r6  r·  r¸  rÝ   rÖ  r9   r'   rH   r„   Úuse_linecollectionr‘   Ú	key_countr>   r¹  rµ  rG  Úcolor_normalÚminxÚmaxxÚminyÚmaxyrw  Úhrª  Úfancy_arrow_factoryrq  Úedge_viz_objÚloopÚselfloops_to_drawÚedgelist_tupleÚarrow_collectionr’   rG   ÚpadxÚpadyÚcornerss6                                                         r    r	   r	   Ö  s   € ór ãÛ!ÛÝ#Ûð €~Ø"#§-¡-£/Ò"F°Q·_±_Ó5FÐGÑä˜&¤$Ô'ÜÐLÓMÐMØ!'˜ZÐä�/¤3Ô'Ø*Ð+‰Ø	�‰�_Ô	%Ü˜Ó/‰àQˆÜ×Ñ˜sÓ#Ð#ñ
 ðPð 	ð Ð!Ø�M‰M˜#Ÿ*™* \Ó2¼[ÐUVˆMÔWØ˜Š?Ø�M‰M˜#Ÿ*™* [Ó1¼KÐTUˆMÔVØ Ò!Ø�M‰MØ—
‘
Ð.Ó/¼+ÐRSð ô ð  Ò!Ø�M‰MØ—
‘
Ð.Ó/¼+ÐRSð ô ô Ñ6 oÔ6Ô6Ø�M‰MØ—
‘
Ð,Ó-¼ÐPQð ô ð
 ÐØŸm™mœo‘U°3ˆ
à	€zØ�W‰W‹YˆàÐÜ˜Ÿ™“=ˆä
ˆ8„}Ø�?‰?ÔÜ#×/Ñ/Ñ0JÓKˆIØCKÖL¸aœD ¬5°°2°A°«<Ñ!8Õ9ÐLˆLÑLà˜3¤ X£Ñ.‰Làˆ	àÐÜ˜Ÿ™›	“?ˆð ÐØˆ
ð �z‰z¸8ÖD°a˜C  !¡™I s¨1¨Q©4¡yÒ1ÒDÓE€Hð
 	�‰�JÔÜ�‹_¤ H£Ò-Ø�F‰F°:Ö>¨a”J˜q¤&Õ)Ò>Ô?àÐ Ü˜i¨¯©×)<Ñ)<Ô=Ð=Ð=àŸ™›ˆIØÐÜ˜J›ˆIØÐÜ˜J›ˆIØ—z‘z×+Ñ+°ÀÐ+ÓKˆØ:DÖE°Q‘i¡¨Q£Õ0ÐEˆ
ÐEð �7‰7�2—8‘8˜H¢Qª¨1 WÑ-Ó.Ó/€DØ�7‰7�2—8‘8˜H¢Qª¨1 WÑ-Ó.Ó/€DØ�7‰7�2—8‘8˜H¢Qª¨1 WÑ-Ó.Ó/€DØ�7‰7�2—8‘8˜H¢Qª¨1 WÑ-Ó.Ó/€DØˆt‰€AØˆt‰€Að
  š6‘a u¨r¯x©x¸	Ó/B×/FÑ/FÓ/HÑ'H€OÜ+ØØØØØØØØØØØØØØØØØô#Ðò* ØŸ/™/×8Ñ8ØØØØØØð 9ó 
ˆð 	× Ñ  Ô+Ø× Ñ  ¨IÔ6Ø×"Ñ" 1Ô%Ø×!Ñ! %Ô(Ø
×Ñ˜/Ô*Ø&ˆô /1×.?Ñ.?ÀÓ.BÖW dÀdÈhÒFVšTÐWÐÐWÙÜ!¤#¤e¨XÓ"6Ó7ˆNØ!ÐØ)ò $�Ø"×(Ñ(¨Ó.�Ù+¨AÓ.�Ø ×'Ñ'¨Ô.Ø—‘˜UÕ#ñ	$ð ˆÜ”s˜8“}Ó%ò 	'ˆAÙ'¨Ó*ˆEØ�L‰L˜ÔØ×Ñ Õ&ð	'ð ˜‘˜4 !™8ˆ$€DØ�d‰{˜D 4™KÐ(¨4°$©;¸¸t¹Ð*DÐD€GØ×Ñ�gÔØ×ÑÔáØ
�‰ØØØØØØð 	ô 	
ð Ðùòk Mùò Eùò ?ùò Fùòj Xs$   È!W;É)X Ê>XÍX
Ó,	XÓ6Xc                 ó`  ‡‡— ddl m} |€|j                  «       }‰€| j                  «       D �ci c]  }||“Œ c}Št	        «       Šˆˆfd„}ˆfd„} ||d«        ||d«        ||d«        ||d«        ||d	«       i }‰j                  «       D ]}  \  }}||   \  }}t        |t        «      st        |«      }|j                  ||| |||d«       |||d«       |||d«       |||d«       |||d	«      |	|
|j                  ||¬
«      }|||<   Œ |r|j                  dddddd¬«       |S c c}w )aæ	  Draw node labels on the graph G.

    Parameters
    ----------
    G : graph
        A networkx graph

    pos : dictionary
        A dictionary with nodes as keys and positions as values.
        Positions should be sequences of length 2.

    labels : dictionary (default={n: n for n in G})
        Node labels in a dictionary of text labels keyed by node.
        Node-keys in labels should appear as keys in `pos`.
        If needed use: `{n:lab for n,lab in labels.items() if n in pos}`

    font_size : int or dictionary of nodes to ints (default=12)
        Font size for text labels.

    font_color : color or dictionary of nodes to colors (default='k' black)
        Font color string. Color can be string or rgb (or rgba) tuple of
        floats from 0-1.

    font_weight : string or dictionary of nodes to strings (default='normal')
        Font weight.

    font_family : string or dictionary of nodes to strings (default='sans-serif')
        Font family.

    alpha : float or None or dictionary of nodes to floats (default=None)
        The text transparency.

    bbox : Matplotlib bbox, (default is Matplotlib's ax.text default)
        Specify text box properties (e.g. shape, color etc.) for node labels.

    horizontalalignment : string or array of strings (default='center')
        Horizontal alignment {'center', 'right', 'left'}. If an array is
        specified it must be the same length as `nodelist`.

    verticalalignment : string (default='center')
        Vertical alignment {'center', 'top', 'bottom', 'baseline', 'center_baseline'}.
        If an array is specified it must be the same length as `nodelist`.

    ax : Matplotlib Axes object, optional
        Draw the graph in the specified Matplotlib axes.

    clip_on : bool (default=True)
        Turn on clipping of node labels at axis boundaries

    hide_ticks : bool, optional
        Hide ticks of axes. When `True` (the default), ticks and ticklabels
        are removed from the axes. To set ticks and tick labels to the pyplot default,
        use ``hide_ticks=False``.

    Returns
    -------
    dict
        `dict` of labels keyed on the nodes

    Examples
    --------
    >>> G = nx.dodecahedral_graph()
    >>> labels = nx.draw_networkx_labels(G, pos=nx.spring_layout(G))

    Also see the NetworkX drawing examples at
    https://networkx.org/documentation/latest/auto_examples/index.html

    See Also
    --------
    draw
    draw_networkx
    draw_networkx_nodes
    draw_networkx_edges
    draw_networkx_edge_labels
    r   Nc                 ó”   •— t        | t        «      r7t        | «      t        ‰«      k7  rt        |› d�«      ‚‰j	                  |«       y y )Nz% must have the same length as labels.)rm   r\  ry   r]   Úadd)Úp_valueÚp_nameÚindividual_paramsry  s     €€r    Úcheck_individual_paramsz5draw_networkx_labels.<locals>.check_individual_params°  sC   ø€ Ü�gœtÔ$Ü�7‹|œs 6›{Ò*Ü  F 8Ð+PÐ!QÓRÐRØ×!Ñ! &Õ)ð %r&   c                 ó   •— |‰v r||    S |S r   rì   )rë   r   r  r  s      €r    Úget_param_valuez-draw_networkx_labels.<locals>.get_param_value¶  s   ø€ ØÐ&Ñ&Ø˜4‘=Ð Øˆr&   Ú	font_sizeÚ
font_colorÚfont_weightÚfont_familyr¼   )
r¸   r¹   rº   r»   r¼   rK  rL  r_   r¿   Úclip_onrÞ   Frß   )rQ  rR  rI   r(   Úsetr÷   rm   r  rU  r[   rT  )r3   rÐ   ry  r  r  r	  r  r¼   r¿   rK  rL  rD   r
  rÝ   rH   r=   r  r  Ú
text_itemsrJ  r   rK   r…   r  s     `                    @r    r
   r
   K  sh  ù€ õv $à	€zØ�W‰W‹Yˆà€~Ø !§¡£	Ö*˜1�!�Q‘$Ò*ˆä›Ðõ*ôñ
 ˜I {Ô3Ù˜J¨Ô5Ù˜K¨Ô7Ù˜K¨Ô7Ù˜E 7Ô+à€JØ—L‘L“Nò ‰ˆˆ5Ø�Q‘‰ˆˆAÜ˜%¤Ô%Ü˜“JˆEØ�G‰GØØØÙ   I¨{Ó;Ù! ! Z°Ó>Ù" 1 k°=ÓAÙ" 1 k°=ÓAÙ! ! U¨GÓ4Ø 3Ø/Ø—l‘lØØð ó 
ˆð ˆ
�1Šð'ñ* Ø
�‰ØØØØØØð 	ô 	
ð Ðùòk +s   ¯
D+c                 ó†  ‡2‡3— ddl }ddlm} ddl} G d„ dt        |j
                  j                  «      }|	€ddddœ}	t        |t        «      r|g}n2|j                  |«      rt        |«      }nt        j                  d«      ‚|€|j                  «       }|€F| j                  «       rd	d
ini } | j                  d!dd
i|¤ŽD ��ci c]  �^ }}t!        |«      |“Œ }}}|si S t#        |j%                  «       Ž \  Š2}|€t        | j'                  «       «      }|j)                  ‰2D �cg c]  }||d      ||d      f‘Œ c}«      }| j                  «       r>t+        j,                  d„ «      }‰2D �cg c]  }t/        |t!        |dd «         «      ‘Œ }}ndgt1        ‰2«      z  }d}|rY|j3                  |j5                  |dd…dd…df   «      «      } |j7                  |j5                  |dd…dd…df   «      «      }!|!| z
  }|dk7  r|n!d|j9                  |«      j;                  «       z  }"t=        |‰2||||"||¬«      }#i Š3ˆ2ˆ3fd„}$ˆ3fd„}% |$|d«        |$|d«        |$|d«        |$|d«        |$|
d«        |$|d«        |$|d«        |$|d«       i }&t?        t#        ‰2|«      «      D �]p  \  }'\  }}(t        |(t        «      st        |(«      }(|dd \  })}* |#|'«      }+|)|*k(  rÒ|+jA                  «       },|jB                  jE                  ||)   «      }- |,|-|-«      }.|jB                  jG                  «       jI                  |.«      }/|/jJ                  d   \  }0}1|j                  |0|1|( |%|d«       |%|d«       |%|d«       |%|d«       |%|d«       |%|
d«       |%|d«      d|jB                  |	d|¬«      |&|<   �Œ ||+|( |%|d«       |%|d«       |%|d«       |%|d«       |%|d«       |%|
d«       |%|d«      |jB                  |	d| |%|d«       |%|d«       |¬«      |&|<   �Œs |r|jM                  dddddd¬ «       |&S c c}}w c c}w c c}w )"a®  Draw edge labels.

    Parameters
    ----------
    G : graph
        A networkx graph

    pos : dictionary
        A dictionary with nodes as keys and positions as values.
        Positions should be sequences of length 2.

    edge_labels : dictionary (default=None)
        Edge labels in a dictionary of labels keyed by edge two-tuple.
        Only labels for the keys in the dictionary are drawn.

    label_pos : float (default=0.5)
        Position of edge label along edge (0=head, 0.5=center, 1=tail)

    font_size : int (default=10)
        Font size for text labels

    font_color : color (default='k' black)
        Font color string. Color can be string or rgb (or rgba) tuple of
        floats from 0-1.

    font_weight : string (default='normal')
        Font weight

    font_family : string (default='sans-serif')
        Font family

    alpha : float or None (default=None)
        The text transparency

    bbox : Matplotlib bbox, optional
        Specify text box properties (e.g. shape, color etc.) for edge labels.
        Default is {boxstyle='round', ec=(1.0, 1.0, 1.0), fc=(1.0, 1.0, 1.0)}.

    horizontalalignment : string (default='center')
        Horizontal alignment {'center', 'right', 'left'}

    verticalalignment : string (default='center')
        Vertical alignment {'center', 'top', 'bottom', 'baseline', 'center_baseline'}

    ax : Matplotlib Axes object, optional
        Draw the graph in the specified Matplotlib axes.

    rotate : bool (default=True)
        Rotate edge labels to lie parallel to edges

    clip_on : bool (default=True)
        Turn on clipping of edge labels at axis boundaries

    node_size : scalar or array (default=300)
        Size of nodes.  If an array it must be the same length as nodelist.

    nodelist : list, optional (default=G.nodes())
       This provides the node order for the `node_size` array (if it is an array).

    connectionstyle : string or iterable of strings (default="arc3")
        Pass the connectionstyle parameter to create curved arc of rounding
        radius rad. For example, connectionstyle='arc3,rad=0.2'.
        See `matplotlib.patches.ConnectionStyle` and
        `matplotlib.patches.FancyArrowPatch` for more info.
        If Iterable, index indicates i'th edge key of MultiGraph

    hide_ticks : bool, optional
        Hide ticks of axes. When `True` (the default), ticks and ticklabels
        are removed from the axes. To set ticks and tick labels to the pyplot default,
        use ``hide_ticks=False``.

    Returns
    -------
    dict
        `dict` of labels keyed by edge

    Examples
    --------
    >>> G = nx.dodecahedral_graph()
    >>> edge_labels = nx.draw_networkx_edge_labels(G, pos=nx.spring_layout(G))

    Also see the NetworkX drawing examples at
    https://networkx.org/documentation/latest/auto_examples/index.html

    See Also
    --------
    draw
    draw_networkx
    draw_networkx_nodes
    draw_networkx_edges
    draw_networkx_labels
    r   Nc                   ó   — e Zd Zy)ú2draw_networkx_edge_labels.<locals>.CurvedArrowTextNr?  rì   r&   r    r@  r  Y	  rA  r&   r@  rÊ   rË   rÌ   zNdraw_networkx_edges arg `connectionstyle` must bestring or iterable of stringsr   TrC  rU   c                  ó,   — t        j                  d«      S r§  rÐ  rì   r&   r    rÓ  z+draw_networkx_edge_labels.<locals>.<lambda>|	  s   € ´I·O±OÀAÓ4F€ r&   rh   rÔ  rÕ  c                 ó˜   •— t        | t        «      r9t        | «      t        ‰«      k7  rt        |› d�«      ‚| j	                  «       ‰|<   y y )Nz' must have the same length as edgelist.)rm   r—  ry   r]   Úiter)r   r  r¶  r  s     €€r    r  z:draw_networkx_edge_labels.<locals>.check_individual_params—	  sF   ø€ ä�gœtÔ$Ü�7‹|œs 8›}Ò,Ü  F 8Ð+RÐ!SÓTÐTØ(/¯©«Ð˜fÒ%ð %r&   c                 ó,   •— |‰v rt        ‰|   «      S | S r   )rÜ  )r   r  r  s     €r    r  z2draw_networkx_edge_labels.<locals>.get_param_valueŸ	  s"   ø€ ØÐ&Ñ&ÜÐ)¨&Ñ1Ó2Ð2Øˆr&   r  r  r  r¼   rK  rL  rÑ   rB   r	  )r¸   r¹   rº   r»   r¼   rK  rL  rF   r_   r¿   r:  r
  )r¸   r¹   rº   r»   r¼   rK  rL  r_   r¿   r:  r
  rB   rC   rD   rÞ   Frß   rì   )'r'   rQ  rR  rk   r@   rU  rV  rm   r  r´  r—  r0   rô   rI   r)   r*   r"   rZ  r÷   r(   r#  rP  rÛ  rÜ  ry   rà  rá  râ  r%  r,   r£  r€   r`   r[   r_   rƒ   rb  rl   rT  )4r3   rÐ   Úedge_labelsrB   r  r  r	  r  r¼   r¿   rK  rL  rD   rÑ   r
  r°   rž  r6  rÝ   r9   rH   r„   r@  r�  r  Údry  r>   rµ  rí  r¹  ró  rñ  rò  rª  rô  r  r  r  r’   rJ  Ún1Ún2rG   rt  rc   r‡   ru  r   rK   r¶  r  s4                                                     @@r    r   r   ä  s²  ù€ ób Ý#ÛôÔ-¨s¯x©x¯}©}ô ð €|Ø#¨?À/ÑRˆä�/¤3Ô'Ø*Ð+‰Ø	�‰�_Ô	%Ü˜Ó/‰ä×Ñð,ó
ð 	
ð
 
€zØ�W‰W‹YˆàÐØ!"§¡Ô!2�˜‰~¸ˆØ6=°a·g±gÑ6PÀ4Ð6PÈ4Ñ6P×Q©(¨4°”u˜T“{ A‘~ÐQˆÑQáØˆ	Ü˜K×-Ñ-Ó/Ð0Ñ€HˆfàÐÜ˜Ÿ™›	“?ˆð �z‰z¸8ÖD°a˜C  !¡™I s¨1¨Q©4¡yÒ1ÒDÓE€Hà‡�ÔÜ×+Ñ+Ñ,FÓGˆ	Ø?GÖH¸!œ˜Y¤u¨Q¨r°¨U£|Ñ4Õ5ÐHˆÑHà�sœS ›]Ñ*ˆð
 	
€AÙØ�w‰w�r—x‘x ªªA¨q¨Ñ 1Ó2Ó3ˆØ�w‰w�r—x‘x ªªA¨q¨Ñ 1Ó2Ó3ˆØ�4‰KˆØ š6‘a u¨r¯x©x¸	Ó/B×/FÑ/FÓ/HÑ'H€OÜ+ØØØØØØØØô	Ðð Ðõ7ôñ
 ˜I {Ô3Ù˜J¨Ô5Ù˜K¨Ô7Ù˜E 7Ô+ÙÐ/Ð1FÔGÙÐ-Ð/BÔCÙ˜F HÔ-Ù˜I {Ô3à€JÜ%¤c¨(°FÓ&;Ó<ó 7Ñˆ‰=ˆD�%Ü˜%¤Ô%Ü˜“JˆEà�b�q�‰ˆˆBÙ# AÓ&ˆØ�Š8Ø"'×";Ñ";Ó"=ÐØ—<‘<×)Ñ)¨#¨b©'Ó2ˆDÙ+¨D°$Ó7ˆIØŸ™×-Ñ-Ó/×>Ñ>¸yÓIˆIØ×%Ñ% aÑ(‰DˆAˆqØ!Ÿw™wØØØÙ$ Y°Ó<Ù% j°,Ó?Ù& {°MÓBÙ& {°MÓBÙ% e¨WÓ5Ù$3Ø'Ð)>ó%ñ #2Ø%Ð':ó#ð ØŸ,™,ØØØð'  'ó  ˆJ�tÓñ,  /ØØÙ$ Y°Ó<Ù% j°,Ó?Ù& {°MÓBÙ& {°MÓBÙ% e¨WÓ5Ù$3Ø'Ð)>ó%ñ #2Ø%Ð':ó#ð Ÿ,™,ØØØÙ)¨)°[ÓAÙ&5°f¸hÓ&GÐ"GØô) ˆJ�tÓðE7ñr Ø
�‰ØØØØØØð 	ô 	
ð ÐùóE Rùò Eùò Is   ÃP3Ä$P9Å,!P>c                 óF   — t        | fdt        j                  | «      i|¤Ž y)aE  Draw the graph `G` with a bipartite layout.

    This is a convenience function equivalent to::

        nx.draw(G, pos=nx.bipartite_layout(G), **kwargs)

    Parameters
    ----------
    G : graph
        A networkx graph

    kwargs : optional keywords
        See `draw_networkx` for a description of optional keywords.

    Raises
    ------
    NetworkXError :
        If `G` is not bipartite.

    Notes
    -----
    The layout is computed each time this function is called. For
    repeated drawing it is much more efficient to call
    `~networkx.drawing.layout.bipartite_layout` directly and reuse the result::

        >>> G = nx.complete_bipartite_graph(3, 3)
        >>> pos = nx.bipartite_layout(G)
        >>> nx.draw(G, pos=pos)  # Draw the original graph
        >>> # Draw a subgraph, reusing the same node positions
        >>> nx.draw(G.subgraph([0, 1, 2]), pos=pos, node_color="red")

    Examples
    --------
    >>> G = nx.complete_bipartite_graph(2, 5)
    >>> nx.draw_bipartite(G)

    See Also
    --------
    :func:`~networkx.drawing.layout.bipartite_layout`
    rÐ   N)r   r0   Úbipartite_layout©r3   rR   s     r    r   r   ô	  s"   € ôR 	ˆÑ1”×#Ñ# AÓ&Ð1¨&Ó1r&   c                 óF   — t        | fdt        j                  | «      i|¤Ž y)aÕ  Draw the graph `G` with a circular layout.

    This is a convenience function equivalent to::

        nx.draw(G, pos=nx.circular_layout(G), **kwargs)

    Parameters
    ----------
    G : graph
        A networkx graph

    kwargs : optional keywords
        See `draw_networkx` for a description of optional keywords.

    Notes
    -----
    The layout is computed each time this function is called. For
    repeated drawing it is much more efficient to call
    `~networkx.drawing.layout.circular_layout` directly and reuse the result::

        >>> G = nx.complete_graph(5)
        >>> pos = nx.circular_layout(G)
        >>> nx.draw(G, pos=pos)  # Draw the original graph
        >>> # Draw a subgraph, reusing the same node positions
        >>> nx.draw(G.subgraph([0, 1, 2]), pos=pos, node_color="red")

    Examples
    --------
    >>> G = nx.path_graph(5)
    >>> nx.draw_circular(G)

    See Also
    --------
    :func:`~networkx.drawing.layout.circular_layout`
    rÐ   N)r   r0   Úcircular_layoutr  s     r    r   r    
  s"   € ôH 	ˆÑ0”×"Ñ" 1Ó%Ð0¨Ó0r&   c                 óF   — t        | fdt        j                  | «      i|¤Ž y)a   Draw the graph `G` with a Kamada-Kawai force-directed layout.

    This is a convenience function equivalent to::

        nx.draw(G, pos=nx.kamada_kawai_layout(G), **kwargs)

    Parameters
    ----------
    G : graph
        A networkx graph

    kwargs : optional keywords
        See `draw_networkx` for a description of optional keywords.

    Notes
    -----
    The layout is computed each time this function is called.
    For repeated drawing it is much more efficient to call
    `~networkx.drawing.layout.kamada_kawai_layout` directly and reuse the
    result::

        >>> G = nx.complete_graph(5)
        >>> pos = nx.kamada_kawai_layout(G)
        >>> nx.draw(G, pos=pos)  # Draw the original graph
        >>> # Draw a subgraph, reusing the same node positions
        >>> nx.draw(G.subgraph([0, 1, 2]), pos=pos, node_color="red")

    Examples
    --------
    >>> G = nx.path_graph(5)
    >>> nx.draw_kamada_kawai(G)

    See Also
    --------
    :func:`~networkx.drawing.layout.kamada_kawai_layout`
    rÐ   N)r   r0   Úkamada_kawai_layoutr  s     r    r   r   G
  s"   € ôJ 	ˆÑ4”×&Ñ& qÓ)Ð4¨VÓ4r&   c                 óF   — t        | fdt        j                  | «      i|¤Ž y)aÐ  Draw the graph `G` with a random layout.

    This is a convenience function equivalent to::

        nx.draw(G, pos=nx.random_layout(G), **kwargs)

    Parameters
    ----------
    G : graph
        A networkx graph

    kwargs : optional keywords
        See `draw_networkx` for a description of optional keywords.

    Notes
    -----
    The layout is computed each time this function is called.
    For repeated drawing it is much more efficient to call
    `~networkx.drawing.layout.random_layout` directly and reuse the result::

        >>> G = nx.complete_graph(5)
        >>> pos = nx.random_layout(G)
        >>> nx.draw(G, pos=pos)  # Draw the original graph
        >>> # Draw a subgraph, reusing the same node positions
        >>> nx.draw(G.subgraph([0, 1, 2]), pos=pos, node_color="red")

    Examples
    --------
    >>> G = nx.lollipop_graph(4, 3)
    >>> nx.draw_random(G)

    See Also
    --------
    :func:`~networkx.drawing.layout.random_layout`
    rÐ   N)r   r0   Úrandom_layoutr  s     r    r   r   o
  s"   € ôH 	ˆÑ.”× Ñ  Ó#Ð. vÓ.r&   c                 óF   — t        | fdt        j                  | «      i|¤Ž y)aO  Draw the graph `G` with a spectral 2D layout.

    This is a convenience function equivalent to::

        nx.draw(G, pos=nx.spectral_layout(G), **kwargs)

    For more information about how node positions are determined, see
    `~networkx.drawing.layout.spectral_layout`.

    Parameters
    ----------
    G : graph
        A networkx graph

    kwargs : optional keywords
        See `draw_networkx` for a description of optional keywords.

    Notes
    -----
    The layout is computed each time this function is called.
    For repeated drawing it is much more efficient to call
    `~networkx.drawing.layout.spectral_layout` directly and reuse the result::

        >>> G = nx.complete_graph(5)
        >>> pos = nx.spectral_layout(G)
        >>> nx.draw(G, pos=pos)  # Draw the original graph
        >>> # Draw a subgraph, reusing the same node positions
        >>> nx.draw(G.subgraph([0, 1, 2]), pos=pos, node_color="red")

    Examples
    --------
    >>> G = nx.path_graph(5)
    >>> nx.draw_spectral(G)

    See Also
    --------
    :func:`~networkx.drawing.layout.spectral_layout`
    rÐ   N)r   r0   Úspectral_layoutr  s     r    r   r   –
  s"   € ôN 	ˆÑ0”×"Ñ" 1Ó%Ð0¨Ó0r&   c                 óF   — t        | fdt        j                  | «      i|¤Ž y)aV  Draw the graph `G` with a spring layout.

    This is a convenience function equivalent to::

        nx.draw(G, pos=nx.spring_layout(G), **kwargs)

    Parameters
    ----------
    G : graph
        A networkx graph

    kwargs : optional keywords
        See `draw_networkx` for a description of optional keywords.

    Notes
    -----
    `~networkx.drawing.layout.spring_layout` is also the default layout for
    `draw`, so this function is equivalent to `draw`.

    The layout is computed each time this function is called.
    For repeated drawing it is much more efficient to call
    `~networkx.drawing.layout.spring_layout` directly and reuse the result::

        >>> G = nx.complete_graph(5)
        >>> pos = nx.spring_layout(G)
        >>> nx.draw(G, pos=pos)  # Draw the original graph
        >>> # Draw a subgraph, reusing the same node positions
        >>> nx.draw(G.subgraph([0, 1, 2]), pos=pos, node_color="red")

    Examples
    --------
    >>> G = nx.path_graph(20)
    >>> nx.draw_spring(G)

    See Also
    --------
    draw
    :func:`~networkx.drawing.layout.spring_layout`
    rÐ   N)r   r0   rY  r  s     r    r   r   À
  s"   € ôP 	ˆÑ.”× Ñ  Ó#Ð. vÓ.r&   c                 óJ   — t        | fdt        j                  | |¬«      i|¤Ž y)a÷  Draw networkx graph `G` with shell layout.

    This is a convenience function equivalent to::

        nx.draw(G, pos=nx.shell_layout(G, nlist=nlist), **kwargs)

    Parameters
    ----------
    G : graph
        A networkx graph

    nlist : list of list of nodes, optional
        A list containing lists of nodes representing the shells.
        Default is `None`, meaning all nodes are in a single shell.
        See `~networkx.drawing.layout.shell_layout` for details.

    kwargs : optional keywords
        See `draw_networkx` for a description of optional keywords.

    Notes
    -----
    The layout is computed each time this function is called.
    For repeated drawing it is much more efficient to call
    `~networkx.drawing.layout.shell_layout` directly and reuse the result::

        >>> G = nx.complete_graph(5)
        >>> pos = nx.shell_layout(G)
        >>> nx.draw(G, pos=pos)  # Draw the original graph
        >>> # Draw a subgraph, reusing the same node positions
        >>> nx.draw(G.subgraph([0, 1, 2]), pos=pos, node_color="red")

    Examples
    --------
    >>> G = nx.path_graph(4)
    >>> shells = [[0], [1, 2, 3]]
    >>> nx.draw_shell(G, nlist=shells)

    See Also
    --------
    :func:`~networkx.drawing.layout.shell_layout`
    rÐ   )ÚnlistN)r   r0   Úshell_layout)r3   r%  rR   s      r    r   r   ë
  s"   € ôT 	ˆÑ:”—‘ ¨Ô/Ð:°6Ó:r&   c                 óF   — t        | fdt        j                  | «      i|¤Ž y)a$  Draw a planar networkx graph `G` with planar layout.

    This is a convenience function equivalent to::

        nx.draw(G, pos=nx.planar_layout(G), **kwargs)

    Parameters
    ----------
    G : graph
        A planar networkx graph

    kwargs : optional keywords
        See `draw_networkx` for a description of optional keywords.

    Raises
    ------
    NetworkXException
        When `G` is not planar

    Notes
    -----
    The layout is computed each time this function is called.
    For repeated drawing it is much more efficient to call
    `~networkx.drawing.layout.planar_layout` directly and reuse the result::

        >>> G = nx.path_graph(5)
        >>> pos = nx.planar_layout(G)
        >>> nx.draw(G, pos=pos)  # Draw the original graph
        >>> # Draw a subgraph, reusing the same node positions
        >>> nx.draw(G.subgraph([0, 1, 2]), pos=pos, node_color="red")

    Examples
    --------
    >>> G = nx.path_graph(4)
    >>> nx.draw_planar(G)

    See Also
    --------
    :func:`~networkx.drawing.layout.planar_layout`
    rÐ   N)r   r0   Úplanar_layoutr  s     r    r   r     s"   € ôR 	ˆÑ.”× Ñ  Ó#Ð. vÓ.r&   c                 óF   — t        | fdt        j                  | «      i|¤Ž y)a­  Draw a networkx graph with forceatlas2 layout.

    This is a convenience function equivalent to::

       nx.draw(G, pos=nx.forceatlas2_layout(G), **kwargs)

    Parameters
    ----------
    G : graph
       A networkx graph

    kwargs : optional keywords
       See networkx.draw_networkx() for a description of optional keywords,
       with the exception of the pos parameter which is not used by this
       function.
    rÐ   N)r   r0   Úforceatlas2_layoutr  s     r    r   r   D  s!   € ô" 	ˆÑ3”×%Ñ% aÓ(Ð3¨FÓ3r&   c           	      óˆ  — ddl m}m} ddl}ddl}	ddl}	ddl}
t        | «      t        |«      k(  rSt        | d   t        «      r@|j                  j                  |¬«      }|j                  ||«       |j                  | «      }n6	 |
j                  |j                  j                   j                  | «      g«      }	 t        |«      t        |«      kD  s|j$                  t        |«      k(  rA|
j'                  |t        |«      df«      }|d   |dd…df<   |d   |dd…df<   |d	   |dd…d
f<   t)         | ||«      t        |«      «      «      |dd…df<   |S # t"        $ rK |
j                  | D �cg c]'  }|j                  j                   j                  |«      ‘Œ) nc c}w c}«      }Y Œîw xY w# t*        $ r ||dd…df<   Y |S w xY w)a  Apply an alpha (or list of alphas) to the colors provided.

    Parameters
    ----------

    colors : color string or array of floats (default='r')
        Color of element. Can be a single color format string,
        or a sequence of colors with the same length as nodelist.
        If numeric values are specified they will be mapped to
        colors using the cmap and vmin,vmax parameters.  See
        matplotlib.scatter for more details.

    alpha : float or array of floats
        Alpha values for elements. This can be a single alpha value, in
        which case it will be applied to all the elements of color. Otherwise,
        if it is an array, the elements of alpha will be applied to the colors
        in order (cycling through alpha multiple times if necessary).

    elem_list : array of networkx objects
        The list of elements which are being colored. These could be nodes,
        edges or labels.

    cmap : matplotlib colormap
        Color map for use if colors is a list of floats corresponding to points
        on a color mapping.

    vmin, vmax : float
        Minimum and maximum values for normalizing colors if a colormap is used

    Returns
    -------

    rgba_colors : numpy ndarray
        Array containing RGBA format values for each of the node colours.

    r   )ÚcycleÚisliceNr   r  )r   r   rU   )r   rU   )r   rh   rh   r  éÿÿÿÿ)rÑ  r,  r-  r'   Úmatplotlib.cmr×  rk   ry   rm   r   r-   r.   r/   r#   r%  r  r  r]   r¸   Úresizer—  rv   )r  r¼   Ú	elem_listr   r7   r8   r,  r-  r9   r'   r„   r$   Úrgba_colorsr¹   s                 r    r™  r™  X  s¦  € ÷J (ãÛÛÛô ˆ6ƒ{”c˜)“nÒ$¬°F¸1±I¼vÔ)FØ—‘×&Ñ&¨DÐ&Ó1ˆØ�‰˜˜dÔ#Ø—n‘n VÓ,‰ð
	ØŸ(™( C§J¡J×$=Ñ$=×$EÑ$EÀfÓ$MÐ#NÓOˆKð#ô
 ˆu‹:œ˜KÓ(Ò(¨K×,<Ñ,<ÄÀIÃÒ,NØŸ)™) K´#°i³.À!Ð1DÓEˆKØ!,¨TÑ!2ˆK˜™˜A˜ÑØ!,¨TÑ!2ˆK˜™˜A˜ÑØ!,¨TÑ!2ˆK˜™˜A˜ÑÜ ¡©¨e«´c¸+Ó6FÓ!GÓHˆ’A�q�DÑð Ðøô% ò 	ØŸ(™(ØGMÖN¸e�—‘×*Ñ*×2Ñ2°5Õ9ÑNùÔNóŠKð	ûô  ò #Ø"ˆ’A�r�EÒØÐð#ús1   Â5E Â:BF+ ÅF(Å,,F
ÆF(Æ'F(Æ+GÇ G)NNTr   )NN)Nr±   r¯   rÁ   NNNNNNNNNT)Nr¶   rî   rÉ  NNrØ   NNNNNNr±   NrÁ   rÙ   r   r   T)Nr³   rî   r´   rµ   NNr·   r·   NTT)NrA   rØ   rî   r´   rµ   NNr·   r·   NTTr±   NrÙ   T)NNN)rÊ  rP  rÑ  r}   Únumbersr   Únetworkxr0   Ú__all__r   r@   r   r   r   r   r£  r	   r
   r   r   r   r   r   r   r   r   r   r   r™  rì   r&   r    ú<module>r6     s  ðñó& Û Û Ý ã ò€ð, >Bó@
÷FKñ Kð` óóDLó^zð@ ØØØØ
Ø	Ø	Ø	ØØØØ
ØØó!i÷XX1ñ X1ð| Ø
ØØ
Ø
ØØØØØØØØ
ØØØØØØØó-rðp ØØØØØ
Ø	Ø ØØØØóVðx ØØØØØØ
Ø	Ø ØØØØØØØØó'Mò`)2òX$1òN%5òP$/òN'1òT(/óV*;òZ)/òX4ô(Jr&   