K iQuddlZddlZddlZddlZddlZddlZddlmZddlm Z ddl Z ddl m Z mZmZddlmZdgZej&eZdZd d d Zed ZiZiZiZd ZdZdZdZdZ GddZ!dZ"dZ#ddddZ$dddZ%GddZ&ejNjQdre!Z)ddZ!e)jTjVe!_+ejXe)jTZ-e-j]e-j^jaDcgc] \}}|dk7s |c}}e!_1yycc}}w) N)partial) entry_points)BackendPrioritiesConfigNetworkXConfig)argmap _dispatchableFAILED_TO_CONVERTF load_and_callct|}i}|D]o}|j|vr*tjd|jtd;|r$ |j ||j<a|||j<q|jdd|S#t $r6}tjd|jd|tdYd}~d}~wwxYw) a Retrieve NetworkX ``backends`` and ``backend_info`` from the entry points. Parameters ----------- group : str The entry_point to be retrieved. load_and_call : bool, optional If True, load and call the backend. Defaults to False. Returns -------- dict A dictionary mapping backend names to their respective backend objects. Notes ------ If a backend is defined more than once, a warning is issued. The "nx_loopback" backend is removed if it exists, as it is only available during testing. A warning is displayed if an error occurs while loading a backend. )groupz)networkx backend defined more than once: ) stacklevelz0Error encountered when loading info for backend z: N nx_loopback)rnamewarningswarnRuntimeWarningload Exceptionpop)rr itemsrvepexcs ]/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/networkx/utils/backends.py _get_backendsr-s, u %E B 77b= MM;BGG9E   'bggik277 BrwwK#$FF=$ I  FrwwirRUQVW"  s"B C ,CCznetworkx.backendsc|jjdDcgc]}|jx}s|c}Scc}w)N,)stripsplit)stringxx_strips r_comma_sep_to_listr'js7#\\^11#6 Qaggi;O7;OG QQ Qs AActjtddtjdtj tj z Di}tj D]9\}}d|vr t }n |d}t|t s t di|}|||<;t di|}dt|_ tgg}t||ttjjddttjjd d t!t#tjjd d  }itd<tjj Dcic]*\}}|j%dr|ddj'|,}}}|j(}d|vrt#|j+dnFt#tjjdtjjdd |_t#|j+dd |_t1|D]}t#||||<|Scc}}w)aInitialize ``config.backend_priority``, load backend_info and config. This gets default values from environment variables (see ``nx.config`` for details). This function is run at the very end of importing networkx. It is run at this time to avoid loading backend_info before the rest of networkx is imported in case a backend uses networkx for its backend_info (e.g. subclassing the Config class.) znetworkx.backend_infoTr c3$K|]}|if ywN).0backends r z0_set_configs_from_environment..xs!" default_configz2All installed NetworkX backends and their configs.)algos generatorsNETWORKX_CACHE_CONVERTED_GRAPHSNETWORKX_FALLBACK_TO_NXFNETWORKX_WARNINGS_TO_IGNORE)backend_prioritybackendscache_converted_graphsfallback_to_nxwarnings_to_ignorenetworkxNETWORKX_BACKEND_PRIORITY_Nr1NETWORKX_BACKEND_PRIORITYNETWORKX_AUTOMATIC_BACKENDSr2r+) backend_infoupdaterr8keysrr isinstancetype__doc__rrboolosenvirongetsetr' startswithlowerr7rr1r2sorted) backend_configr-infocfgr7configkeyval prioritiess r_set_configs_from_environmentrVnsD &=TRS%-]]_|7H7H7J%J N%++-&  4 '(C'(Cc6*msm"%w&-n-N$XD (rbA )# JJNN>6 7 BC#J .. j  :>>'23  JJNN+ DK#LLN  Aq bEMDc)$$((#27>33;%%))1R.#9@S DK ".!3!3!5 d"ttK/@'@    MM  j ) ) )A$H #vk"4('+t$ G" s 2A$R1=R7cP|j}||jx}|_|S)zIf the cached documentation exists, it is returned. Otherwise, the documentation is generated using _make_doc() method, cached, and then returned.)r _make_doc)rrs rrFz_dispatchable.__doc__s-    :$(NN$4 4B! rXc ||_d|_y)z_Sets the original documentation to the given value and resets the cached documentation.N)rr)rrTs rrFz_dispatchable.__doc__s rXc|j>tj|j}t d|j j Ds|jg|j j tjdtjjdtjdtjj}nc|j j ^}}|jg|tjdtjjd|}||_|jS)zzReturn the signature of the original function, with the addition of the `backend` and `backend_kwargs` parameters.Nc3jK|]+}|jtjjk(-ywr*)kindinspect Parameter VAR_KEYWORD)r,ps rr.z._dispatchable.__signature__..s*<='++777s13r-)defaultbackend_kwargs parameters) rr signatureranyrvaluesreplacer KEYWORD_ONLYr)rsigr var_keywords r __signature__z_dispatchable.__signature__s= 99 ##DNN3CADAVAVAXkk ..0 ))%w'8'8'E'Et   )),g.?.?.K.K  " ,/>>+@+@+B([kk # ))%w'8'8'E'Et  $  "DIyyrX)r-c||dk7rtd|dd|jvrtd|jd|j|i|S)zDReturns the result of the original function (no backends installed).r<r_r`zz' is not implemented by 'networkx' backend. This function is included in NetworkX as an API to dispatch to other backends.)rdr8NotImplementedErrorrr)rr-r[r\s r_call_if_no_backends_installedz,_dispatchable._call_if_no_backends_installed sj  7j#8'*DEF F T]] *%DII;""  t~~t.v..rXc|}||tvrtd|di}|jjD]\}}|t |kr$||vrt |j d|||}n3||vr||}n)||jvrt |j d|k|*||jvs|t |j d|d|||<|jrt|}|j|jzD]1}t||} | ||<||vr| ||< | ||j|<3|jD chc] \}} ||jvr t| dd"} }} |j|jzD]}| jd ||Dn(|jD chc]} t| dd} } tjj j#|j |j$r$tjj j&n#tjj j(} tjj*xrd |j,v} |j.r| r||j1| d ||| S| j3d|d |d}d|d|j d|}| r| |hk(r_|j5|||r|j7||||S|j9|rd}nd}t;d|j d|d|d||j=|| r|j5|||ro|j?||r$t@jCd|j |g}nd}|jE|| ||||}|r|D]\}}|jG|d|S|j9|rd}nd}t;d|j d|d|d|t | dk(rd}dtItK| d} nd}t d|j d|d| d|d|d| |j?||r6d }d!}t | dk(r| \}d"|d#|j d$|} |j5|||r|j7||||d%zS | rCtMd&|jDr#t@jCd'||j |n|j9|rd%}nd}t;||z| rCtMd*|jDr#t@jCd+|j | |ntOd|j d,| d-||jP|i|S| s| sd g}ng}tS}g}g}| D]?}||vr|jU||| vr|jW|/|jW|Ag}g} |D]?}||vr|jU||| vr|jW|/| jW|A| |z }!t |!dkDr#t@jCd.|j |!d/}!ttYjZ|||!|| }"t |"dkDr&t@jCd0|j | xsd1|"g}#t]|"D]\}$}|$rt@jCd2| | r| |hk(r(|j5|||r|j7|||cS|j=|| r|j5|||rq|j_|||rM|jE|| ||}|j$r)| r'|| vr#t@jCd3|j | |||cS|#jW||#D]e}t@jCd5| |jE|| ||}|j$r)| r'|| vr#t@jCd3|j | |||cSt | |z x}%dkDr"t d6| d7|j d8|"d9|%d: d |j,vrd;}nd}t;d|j d<|"d=|cc} }wcc} w#t:$rP}tMd(|jDr$t@jCd)||j ||nYd}~ed}~wwxYw#t:$r-}t@jCd4||j |Yd}~Od}~wwxYw#t:$r-}t@jCd4||j |Yd}~d}~wwxYw)>zReturns the result of the original function, or the backend function if the backend is specified and that backend implements `func`.Nr_r`z() got multiple values for z$() missing required graph argument: z() required graph argument z is None; must be a graph__networkx_backend__c36K|]}t|ddywrN)getattrr,gs rr.z@_dispatchable._call_if_any_backends_installed..Ss"+A5t<+sr<rr:zZNo other backends will be attempted, because the backend was specified with the `backend='z'` keyword argument.z3' backend raised NotImplementedError when calling 'z'.  extra_messagez for the given argumentsr6z' is not implemented by 'z ' backendz. z'%s' will mutate an input graph. This prevents automatic conversion to, and use of, backends listed in `nx.config.backend_priority`. Using backend specified by the `backend='%s'` keyword argument. This may change behavior by not mutating inputs.r mutationsrsz)' is unable to convert graph from backend z to 'z2' backend, which was specified with the `backend='z'` keyword argument. zconversions between backends (if configured) will not be attempted because the original input graph would not be mutated. Using the backend keyword e.g. `backend='some_backend'` will force conversions and not mutate the original input graph.zThis call will mutate inputs, so fall back to 'networkx' backend (without converting) since all input graphs are instances of nx.Graph and are hopefully compatible.z Backend 'z' does not implement 'z2'%s. This call will mutate an input, so automatic z with these argumentsc3PK|]}t|tj ywr*rDnxGraphrs rr.z@_dispatchable._call_if_any_backends_installed..s%.#1bhh/.$&zBackend '%s' can't run '%s'. %sc3PK|]}t|tj ywr*rrs rr.z@_dispatchable._call_if_any_backends_installed..sUq:a2Urz-Backend '%s' raised when calling '%s': %s. %sc3PK|]}t|tj ywr*rrs rr.z@_dispatchable._call_if_any_backends_installed..s%(1bhh'(rz:'%s' was called with inputs from multiple backends: %s. %szN' will mutate an input, but it was called with inputs from multiple backends: z . Automatic zCall to '%s' has inputs from multiple backends, %s, that have no priority set in `nx.config.backend_priority`, so automatic conversions to these backends will not be attempted.r+zaCall to '%s' has inputs from %s backends, and will try to use backends in the following order: %snozTrying next backend: '%s'zCall to '%s' is returning a graph from a different backend! It has inputs from %s backends, but ran with '%s' backend and is returning graph from '%s' backend)Backend '%s' raised when calling '%s': %sz2Trying backend: '%s' (ignoring `should_run=False`)zUnable to convert inputs from z backends and run 'z6'. NetworkX is configured to automatically convert to zB backends. To remedy this, you may enable automatic conversion to z backends by adding them to `nx.config.backend_priority`, or you may specify a backend to use with the `backend=` keyword argument.zO This function is included in NetworkX as an API to dispatch to other backends.z' is not implemented by z backends. To remedy this, you may enable automatic conversion to more backends (including 'networkx') by adding them to `nx.config.backend_priority`, or you may specify a backend to use with the `backend=` keyword argument.)0rArdrkrrr{rrrlistrCrrBrrrRr7rJrr2r1r:r8 _is_testing_convert_and_call_for_testsdiscard_can_backend_run_call_with_backend_does_backend_haver _can_convert_will_call_mutate_input_loggerdebug_convert_and_callrnextiterall RuntimeErrorrrKrappend itertoolschain enumerate_should_backend_run)&rr-r[r\rfgraphs_resolvedgnameposgraphlist_of_graphsrgraph_backend_namesr7r:backend_kwarg_msgrextrarrcacherSmaybe_s mutate_msg fallback_msg msg_templaterbackend_fallbackseengroup1group2rgroup4group5group3 try_orderbackends_to_try_again is_not_firstunspecified_backendss& r_call_if_any_backends_installedz-_dispatchable._call_if_any_backends_installedsI   # L(H,/IJK K++++- /JE3SYF?#tyyk1LUI$VWWS &u d222yyk!EeWM} 4 44#99+%@ Ibc*/&' /:   :D))O,@,@,BB >!%oe&!0 5 5 7#E1 0 00148# # ))O,@,@,BB #**+,U3+ )//1#148# # 995599 II"" II & & 1 1++11   11QjDMM6Q    0\5I33 #- 4  ##D)  # 00<~=QS  L>"II;c"3!46 '*=,*O((tVD22$dF-3**<86EE) {";L>gR 124  /BC((tVD33D&A / !II(%' $( //$+&3"+ 0B!*31JE3"IIc40 1 I**<86EE) {";L>gR 124&'1,()$t4G/H*I)J!&L#DII;GyPQ&'u\N;00<~=R$%'   ' 'f 5; F  &'1,!4 ~-CDII;ODDN<Q &H,,\4H#66( "*69P*P 7 I&&#."1!7!7!9 .+ =( II(  22<@$;E$&E1,2FGGC()//1 (% PII' # {#66I5JK!!+ ."4>>4262 2 !4!+| ! xu$ $Dt| HHTN** d# d# $$ $Dt| HHTN** d# d# $%t+ v;?" MM8   FPQ y>A  MM6 #+t  !#*3I*>,  &L, 9<H) *.Al^.S,,\4H#66|T6RR&& "5++L$G// dFK!33(*=tV!// 3 ,4G G$MM!X!% 3 , , " )00>K, `2 L MMDl  ++ "5tV''+$,??MMP +$$ - D ':T'AA# BQ F01D0EF {#[!!!5 67UU  T]] *"  E! {29+>/05g  7  a ##V+ UO.su "'&&v. 'kT']vzz(/CD P()7{d7m 8AB+G+G  &,  MMD#   rXcj|dk(rd|jvSt|}t||jS)z/Does the specified backend have this algorithm?r<)r8rgrer)rrfr-s rrz _dispatchable._does_backend_have1s4 : %. . -w **rXc |dk(rd|jvSt|}t||js"tj d||jy|j |j||}t|ts|sFt|trd|nd}tj d||jt||||yy)zBCan the specified backend run this algorithm with these arguments?r<z$Backend '%s' does not implement '%s'F , because: r6z0Backend '%s' can't run `%s` with arguments: %s%sT) r8rgrerrrrarDrz _LazyArgsRepr)rrfr[r\r-rareasons rrz_dispatchable._can_backend_run9s : %. . -w * MM6 dii //$))T6: gs #70:7C0H{7),bF MMB dD&1  rXc |dk(ryt|}|j|j||}t|ts|sFt|trd|nd}t j d||jt||||yy)zShould the specified backend run this algorithm with these arguments? Note that this does not check ``backend.can_run``. r<Trr6z4Backend '%s' shouldn't run `%s` with arguments: %s%sF)rgrbrrDrzrrr)rrfr[r\r-rbrs rrz!_dispatchable._should_backend_runRs : % -'' 4@ j# &j3=j#3N{:,/TVF MMF dD&1  rXc |jj|i|}|j|js|j}|d=|j |fS|dk(rdx}x} } n<|j }|j} |j} |j} |j} |durn|durd} nt|tro|j|dust|j|rd}d} nA|j|dur.t tr| |k(st| tr || vrd}d} nd} n6t| tr| ddk(r'tj!|j| dd d} nt|j| rd}d} n|j| |j| di} n|j"d k(rGt%|jd d r.tj!|jd j&d} ncd} n`| j)D cic]E\} }|j| x}/|t|tr|jj+|dn|G} } }| durn| durd} nt| tro|j| dust|j| rd} d} nA|j| dur.t tr| | k(st| tr | | vrd} d} nd}  nt| tro| ddk(r&tj!|j| dd } nt|j| rd} d} n|j| |j| di} nbd} n_| j)D cic]D\} }|j| x}.|t|tr|jj+|n|F} } }|jD]F}||j,vrV|j|Dcgc]/}t/|d d|k7r|j1||| | || | ||| n|1c}|j|<h|j|}|+||j2vrt5d|d|j"dt|trd}|j+|| }n|}| }t| trd}| j+|| }n| }| }t| t6r|| v}n| }t/|d d|k7s|j1|||||||||| |j|<I|j}|d=|j |fScc}} wcc}} wcc}w)z~Convert graph arguments to the specified backend. Returns ------- args tuple and kwargs dict r-r<TFNr[rrvto_numpy_arraydtypenamesr)rlrmrnrorp graph_name use_cacherz!Missing required graph argument `z` in z function)rbindapply_defaultsrkr\r[rnrorprlrmrDrz argumentscallablerfromkeysrrerrrJrr_convert_graphrr{rK)rrfr[r\r rbound bound_kwargsrnrorprlrmrSrT edge_attr node_attrrrrpreserve_edgesedgespreserve_nodesnodespreserve_graphs r_convert_argumentsz _dispatchable._convert_argumentsjs(""''88 {{ <:s+"55j$/':5 ',#! ',#     C (!}#"]]5??:a;K+LaP %//*56&*#! ,8#ooj91= ..7('4"]]5??7+C+I+I1M " !+ 0 0 2C!&!55IB*S#:N5??..sA6TWWJ % '  D (J +S 123t;x 34@ '+#! !45>:s+"55j$/':5 ',#! ',#     C (!}#"]]5??:a;K+LM %//*56&*#! ,8#ooj94@ " !+ 0 0 2C!&!55IBz#s7K5??..s3QTTJ[[7 E((( #__U3*q"8*EU''$#-#-,?,?-A#("+"+(  *&$.= 4 44 #;E7% {R[\148%*N/33E:FE%8N&E148%*N/33E:FE%8N&E2C8%*.B%BN%9N5"8*EU-1-@-@$#(#(,:,:-;#("+"+.A .EOOE*Y7 p||  #zz<''wr*sA UA U>4Uc | r t|ddnd} | | jdij|i} t|||||} t| | | \}}|dtj j vr&tjd|d|jd|tk(rtd |d |jd tjd t|d d||j||S|dk(rXt|d s$tjd|j|||St|j } |j#|}n5t|} |j)||||||xs| du|j|}| ;t'  |tjdt|d d||j||S#t$$r| t'  twxYw#t$$r| t'  twxYw)N__networkx_cache__r8rlrmrnrorp)rrzNote: conversions to backend graphs are saved to cache (`G.__networkx_cache__` on the original graph) by default. This warning means the cached graph is being used for the z backend in the call to a. For the cache to be consistent (i.e., correct), the input graph must not have been manually mutated since the cached graph was created. Examples of manually mutating the graph data structures resulting in an inconsistent cache include: >>> G[u][v][key] = val and >>> for u, v, d in G.edges(data=True): ... d[key] = val Using methods such as `G.add_edge(u, v, weight=val)` will correctly clear the cache to keep it consistent. You may also use `G.__networkx_cache__.clear()` to manually clear the cache, or set `G.__networkx_cache__` to None to disable caching for G. Enable or disable caching globally via `nx.config.cache_converted_graphs` config. To disable this warning: >>> nx.config.warnings_to_ignore.add("cache") z6Graph conversion aborted: unable to convert graph to 'z' backend in call to `z1', because this conversion has previously failed.zZUsing cached converted graph (from '%s' to '%s' backend) in call to '%s' for '%s' argumentrr<zUnable to convert input to 'networkx' backend in call to '%s' for '%s argument, because it is not from a backend (i.e., it does not have `G.__networkx_backend__` attribute). Using the original object: %s)rlrmrnrorprr zUCaching converted graph (from '%s' to '%s' backend) in call to '%s' for '%s' argument)r setdefault_get_cache_key_get_from_cacherrRr;rrrr rrrrergr convert_to_nxr _set_to_cacheconvert_from_nx)rrfrrlrmrnrorpr r rnx_cacherrS compat_keyrr-s rrz_dispatchable._convert_graph7skBK75"6=PT  '' B7BB">>MM#$0"23##'99+.N N.** .(>)? {KII  8E#94@ II  : %5"89 !II #E$>$>?G **51 $L1G ,,))(;(;*>)UQUAU)- "   %b ) MM45t<    G '!%.?@ ( '!%.?@ s;G)G"G"Hrc ^|dk(r|j|i|St|}tjd||jt ||| t ||j|i|S#t$r6}|.tjd||j|t||d}~wwxYw)zICall this dispatchable function with a backend without converting inputs.r<6Using backend '%s' for call to '%s' with arguments: %sNr)rrgrrrrrr)rrfr[r\rr-rs rrz _dispatchable._call_with_backends : %!4>>4262 2 - D  II $f -  .77DII.?? ?" ( ? II  *-8cA  sA-- B,61B''B,rc "|dk(r |j}n!t|}t||j}||hz } tj dt | dkDr| ndtt| dt | dkDrdnd||j |j|||tjj|\} } |dk7r-tj d ||jt|| |  || i| S#t$rC} t j d|dnd z|||jg|d n| f| t|| d } ~ wwxYw#t$r6} |.tj d ||j| t|| d } ~ wwxYw)aCall this dispatchable function with a backend after converting inputs. Parameters ---------- backend_name : str input_backend_names : set[str] args : arguments tuple kwargs : keywords dict extra_message : str, optional Additional message to log if NotImplementedError is raised by backend. mutations : list, optional Used to clear objects gotten from cache if inputs will be mutated. r<zJConverting input graphs from %s backend%s to '%s' backend for call to '%s'rr_rr6r rzAFailed to convert graphs from %s to '%s' backend for call to '%s'Nz: %sr+r'r)rrgrrrrrrrrrrRr9rr) rrfinput_backend_namesr[r\rrrr-other_backend_namesconverted_argsconverted_kwargsrs rrz_dispatchable._convert_and_calls. : %>>D#L1G7DII.D1\NB X&'!+ T$2345Q7*+a/CR  II  /3/F/F))::# 0G0 ,N,* : % MMH dN4DE   <+;< <-#  MMS&.2F<#   &-"C6  ()-8cA  .# ( ? II  *-8cA  s01D8E E  >EE  F1F  Frc  !"#$%&'()*+,-t|}j|||s|s jsA|r-tj d|j t ||j|i|Sddl}dj d|}t|j r|dz }|j|ddl m m !m"ddlm(m)dd lmmm%m&dd lm,dd lm#ddl*dd lmm$dd lm+j@xrdjBvxrj dv}djBvxrjE||} |r|s| s|x} } ntG!#$%&(),f d|D\} } |r|s| s|x} } nCtG!#$%&(),-f d|jID\} } tK| } tK| } jM|| | dd\}}| rjVjXi}|j[jVjX| i| }|j[jD]F}|j\|}|j\||cxur'n*|j|j\|<H|jP} |j^} | jaddtj d|j t  tc|j |i|}j@tetfjhxs9t|dxs+te|tjtlzxrtod|Dk7rfj dvrtod|DsFj dvrtod|Ds&j dvrtqd j d) !"'*+fd! ''fd"}j d#vrn&te|!r ||}n '|'|d*d'}| rbj| i| }jD]A}j\|}j\|}||&|js|}|||d(C|js|}|rread_gml read_gexf from_pydot read_pajek read_graph6 read_adjlist read_graphml read_sparse6 read_edgelistpydot_read_dotquotient_graphagraph_read_dotread_multiline_adjlistbipartite_read_edgelistc3 K|]`}t|r | |fnEt|zzzr | |fn&t|rt| zs |n||fbywr*rD) r,argr4r5r:r0r9r;r6r7r2r3r8s rr.z<_dispatchable._convert_and_call_for_tests..bs "#{3(3-("#w'9F'BY'NOtCy)"#x0&sN],JKSs$ sA&A)c3 K|]}\}}t|r||f| |ffn[t| zzzr||f| |ffn8t|r%t| zs| |xdf|dffn||f||ffyw)rrNrL)r,rrr4r5r:r0r9r;r6r7r2r3r8teeds rr.z<_dispatchable._convert_and_call_for_tests..rs 1"![1Va!-."!Wx%7&%@9%LMa&1d1g,/"!X.&q.=*HIs1v~tq12QQLAa&1a&)* sBBFr)z`Graph conversion failed; falling back to use 'networkx' instead of '%s' backend for call to '%s'z raised r-r'zRBackend '%s' raised when calling '%s': %s; falling back to use 'networkx' instead.rc3lK|],}t|tjxs t|d.ywr)rDrrrer,r%s rr.z<_dispatchable._convert_and_call_for_tests..s3q"((+Qwq:P/QQs24>check_planaritycheck_planarity_recursivec3$K|]}|du ywr*r+rQs rr.z<_dispatchable._convert_and_call_for_tests..s2aT 2r/>held_karp_ascentc3<K|]}t|tywr*)rDrrQs rr.z<_dispatchable._convert_and_call_for_tests..s< 1d+ all_triadsnonisomorphic_treesgeneral_k_edge_subgraphsz!`returns_graph` is incorrect for c .t|jr*tjd|dt |d|dt|j zryt|t jr/|j|dz|j|dzyt|rtt|r$t|ts|D]}||dzt|r#|jD]}||dzyy)N returned a numpy scalar  (z, depth=)r)depth) rDnumberrrrEndarrayrr_node_adjrrzr) rTr^r%r/r0r1 check_resultnprr<s rrcz?_dispatchable._convert_and_call_for_tests..check_results#ryy)"yyk!:3%r$s)HUZT[[\]#rzzG34#rxx(SYYeai8SXXUQY7#x())#x(C1E5A %!)45#w'5A %!)45(rXc 3K|D]} ||y#t$r-}tjd|dt|d|d}~wwxYww)Nr[r\r])rrrE)itrTrrcrs rcheck_iteratorzA_dispatchable._convert_and_call_for_tests..check_iteratorsk  %   $&99+%>se2d3i[PQRs$AA A(A  AA> from_edgelistr[r\r]cL|j|jk(sJ|j|jk(sJ|j|jusJ|j|jusJ|rR|j|jk(sJ|j |j k(sJ|j |j k(sJyt|t|k(sJt|jt|jk(sJyr*) number_of_nodesnumber_of_edges is_directed is_multigraphrrarbrKr)G1G2stricts rassert_graphs_equalzF_dispatchable._convert_and_call_for_tests..assert_graphs_equal s%%'2+=+=+?? ??%%'2+=+=+?? ??>>#r~~'77 77##%)9)9);; ;;xx288+++xx288+++ww"'')))2w#b')))288}BHH 555rX)rp)rT):rgrrkrrrrrpytestrexfailcollections.abcr/r0r1r2r3ior4r5r6r7rr8randomr9numpy numpy.randomr:r; scipy.sparser<rr8rziprrrrr[rEr|rr r r r\rrrDrrtuplerrrr!).rrfr[r\r:r-rsmsgcompare_result_to_nxcompare_inputs_to_nxargs_to_convertargs_nxkwargs_to_convert kwargs_nxr,r-r bound_backendbound_nxrgraph_nxresultrgrq result_nxG0rnconverted_resultrir4r5r:r/r0r1r9r;r6r7rcr2r3rdr<r8rOs.` @@@@@@@@@@@@@@@@@rrz)_dispatchable._convert_and_call_for_testss, -$$\4@T[[!MM>$ %dD&9 &t~~t6v66 dii[ 5l^DCw *22 LL ??'GG!!7(    dmm+   4 $-- ' VD,H,Hv,V  /8L(, ,Og'*   $  ( $OW1:N,2 2  +.  !'   , ( y!%%6 7 YI /3/F/F! 0G0 ,N,, 3D..33^XGWXM  ( ( *.t))..E9EH  # # % @#--e4 **51XII08 H&&u- @mmG I MM)T * D  II $0@ A   0WWdii0.UDTUF*   6288,6#9:fedl3#  MM2622 11",,U3''.>R^ ..r2B'Bu=  >#008 J/?$J$"DNNG9y9 #3 4HO#  7 II  &t~~w<)<<  LL"xx  {(49CUCUBV-W   J#  > II &t~~w<)<<  LL"xx  {(49CUCUBV-W   r  "yyk!:6("T&\NRST sbS$U+?X U(4U#U( AU##U(+ X 45X)X /AXX  Y(YYcD|jdhk(r |jSddg}t|jdhz D]}t|}d|vr|j |d|dn|j |d|vs|j |dvr|j dc|d|j }|j dxs|j d x}r*|jd |jd Dd }nd }|j dxs|j dx}ru|r|j d|j dt|D]B}|j d|||x} r|j d| |j dDn|j d|j dx} s|j d| d|j d|jxsd} | jsd|j d} |jr6|jdj|} | jd| } d|jvr4| jd }d} || js| dz } || js| t|kr:|| jr'| dz } | t|kr|| jr't|j}t|dk(rd}n^t|dk(r d|dd}nFt|dk(rd|dd|dd}n(d d!jd"|d#d$Dzd%|d$dz}d&|d'} |j| | d j|} | S)(zGenerate the backends section at the end for functions having an alternate backend implementation(s) using the `backend_info` entry-point.r<Backendsz-------- short_summaryz : ryr6additional_docsextra_docstringc3.K|] }|rd|n|yw)z Nr+)r,lines rr.z*_dispatchable._make_doc..Ms"6:4bKT1s TFextra_parametersadditional_parametersz Additional parameters:z z urlz [`Source `_]zThe original docstring for z was empty.z z rrz such as ""rz or "z such as , c3(K|] }d|d yw)rNr+rQs rr.z*_dispatchable._make_doc..s@Q!A3a@sNrvz, or "z .. attention:: This function does not have a default NetworkX implementation. It may only be run with an installable :doc:`backend ` that supports itz. Hint: use ``backend=...`` keyword argument to specify a backend or add backends to ``nx.config.backend_priority``.)r8rrNrArrrJextendr#rstriprjoinr"rinsert)rlinesr-rP func_info func_docsadd_gaprparamdescfunc_urlnew_docto_addindexr8examples rrz_dispatchable._make_doc2s ==ZL (>> !   dmmzl:;) !G(D$& yD,A+BCD W%$&$))4 ;L*L R [)$))4I /0TIMMBS4Ty >Good>S 01:==!89LL$ 78#$45%ELL4w0/66t6 vdV_5LL$ %  R $==//x/ z(489 R S) !X..&B~~3DII;kJG == IIK]]5)F )*(6(;G T]] *MM$'EEEl((* El((*#e*$u););)= #e*$u););)=dmm,H8}!X!#&x{m15X!#&x{m5! QG ii@(3B-@@Ax|nA./ &&-Y/FF  LL 'ii&GrXc(t|jffS)zAllow this object to be serialized with pickle. This uses the global registry `_registered_algorithms` to deserialize. )_restore_dispatchabler)rs r __reduce__z_dispatchable.__reduce__s %tyyl22rXr*)r|rrrr~propertyrFsetterrrrr8rtypingCallable__annotations__rrrrrrrrrrrrr+rXrr r s K@!!" @D ^^  ""J@D /AEi Z,4'9W foo 2 +20K(Z{zOS>Nb=BT l]~3rXc(t|jSr*)rr)rs rrrs !$ ' 3 33rXcx|t|jn||t|jfS|fS)zLReturn key used by networkx caching given arguments for ``convert_from_nx``.) frozensetrrs rrrsR  ! *""$%  ! *""$%   !  rX)rfrc|"|jdij|i}|sy|\}}tj|dur|dfnd|dur|dfndD]?}|j|x}|tk7s||k(s&||j ||f||fcSt |j D]\\}} } | tk(rP|dus|durn|dus|dus|j|s5| dus|durn| dus|dus| j|sXt||<n#|dus|durn|dus|dus|j|s|dus| durn|dus| dus|j| s||j ||| ff|| f| fcSy)aSearch the networkx cache for a graph that is compatible with ``key``. Parameters ---------- cache : dict If ``backend_name`` is given, then this is treated as ``G.__networkx_cache__``, but if ``backend_name`` is None, then this is treated as the resolved inner cache such as ``G.__networkx_cache__["backends"][backend_name]``. key : tuple Cache key from ``_get_cache_key``. backend_name : str, optional Name of the backend to control how ``cache`` is interpreted. mutations : list, optional Used internally to clear objects gotten from cache if inputs will be mutated. Returns ------- tuple or None The key of the compatible graph found in the cache. graph or "FAILED_TO_CONVERT" or None A compatible graph if possible. "FAILED_TO_CONVERT" indicates that a previous conversion attempt failed for this cache key. r8)NNTrrF)rJrproductr rrrr) rrSrfredge_keynode_keyr%rekeynkeyrs rr r s0 *b)--lB?  Hh''$D04g$D04g " ))J' 'B 4 # #sj'8$  %!45r> ! "$ $EKKM2# te % %u}D 0U!2$--:Qu}D 0U!2$--:Q*E#J  $$,   h6G6G6M  u    h6G6G6M      edD\2 3d|U""7#: rX)rfcr|"|jdij|i}i}|\}}|||<|tk(r|St|D]m}||k(r |\}} |dus|durn|dus|dus|j|s1| dus|durn| dus|dus| j|sT|j |dx}i|||<o|S)aSet a backend graph to the cache, and remove unnecessary cached items. Parameters ---------- cache : dict If ``backend_name`` is given, then this is treated as ``G.__networkx_cache__``, but if ``backend_name`` is None, then this is treated as the resolved inner cache such as ``G.__networkx_cache__["backends"][backend_name]``. key : tuple Cache key from ``_get_cache_key``. graph : graph or "FAILED_TO_CONVERT" Setting value to "FAILED_TO_CONVERT" prevents this conversion from being attempted in future calls. backend_name : str, optional Name of the backend to control how ``cache`` is interpreted. Returns ------- dict The items that were removed from the cache. Nr8FT)rr rrr) rrSrrfremovedrrcur_keyrrs rr"r"s,  R0;;L"M GHhE#J !!;% c>  d 5=H,  T\X.dmmH6M  5=H,  T\X.dmmH6M YYw- -E :$GG % NrXceZdZdZdZdZy)rzOSimple wrapper to display arguments of dispatchable functions in logging calls.c<||_||_||_d|_yr*)rr[r\value)rrr[r\s r__init__z_LazyArgsRepr.__init__>s    rXc|ju|jjj|ji|j }dj d|jjD}d|d|_|jS)Nrc30K|]\}}|d|yw)=Nr+)r,rSrTs rr.z)_LazyArgsRepr.__repr__..GsW83Qsg.Ws(r]) rrr bind_partialr[r\rr r)rrinners r__repr__z_LazyArgsRepr.__repr__Dso :: 8DII++88$))St{{SEIIWu?T?T?VWWEUG1DJzzrXN)r|rrrFrrr+rXrrr;sY rXr_NETWORKX_BUILDING_DOCS_c d|ttfi|St|fi|}|j|_|Sr*)rr _orig_dispatchablerF)rr\dispatched_funcs rr r Ts8 <=3F3 3,Trsc2 +>>   '  H %'+0+b , - RCL G3G3T64.15Qh6:0f"::>>,- '/66>>M 7  /77 8D"&,,"&//"7"7"9H$!QQ%ZAH#/#M#.$Is  D< (D<