
    wg                         d dl Z ej                  d      dedfd       Z G d d      Z G d d	e      Z G d
 de      Z G d de      Zy)    Nweight)
edge_attrsluc              #     K   dd l }t        t        t        d}| j	                         }t        j                  | t        |      |      j                  d      }|j                  |      } ||   ||      }|j                  }	t        d | j                         D              D ]^  \  }
}|j                  |	|      }| |
   |   j                  |d      }|||
|	z  <   | |||	z  <   ||j                  |
|      z  }||
|ff ` y w)Nr   )fullr   cg)nodelistr   cscdtypec              3   <   K   | ]  \  }}t        ||f        y wN)sorted).0uvs      o/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/networkx/algorithms/centrality/flow_matrix.py	<genexpr>z"flow_matrix_row.<locals>.<genexpr>   s     <$!Qvq!f~<s   g      ?)numpyFullInverseLaplacianSuperLUInverseLaplacianCGInverseLaplaciannumber_of_nodesnxlaplacian_matrixrangeasformatastypewr   edgeszerosgetget_rows)Gr   r   solvernp
solvernamenLCr   r   r   Bcrows                  r   flow_matrix_rowr.      s      %% J
 	
A
Aa@II%PA	A
61E*A	A<!'')<< 1HHQeH$aDGKK$!a%2!a% !**Q""Aq6ks   DDc                   8    e Zd Zd	dZd Zd Zd Zd Zd Zd Z	y)
InverseLaplacianNc                    dd l a|j                  \  }}|| _        || _        || j                  |      | _        n|| _        t        j                  | j                  |f|      | _        |dd dd f   | _	        | j                  |       y )Nr   r      )r   r&   shaper   r(   widthr   r!   r*   L1init_solver)selfr)   r4   r   r(   s        r   __init__zInverseLaplacian.__init__%   sx    A
=ZZ]DFDF4661+U3ABF)    c                      y r    r7   r)   s     r   r6   zInverseLaplacian.init_solver4   s    r9   c                 ,    t        j                  d      NzImplement solverr   NetworkXErrorr7   rs     r   solvezInverseLaplacian.solve7       122r9   c                 ,    t        j                  d      r>   r?   rA   s     r   solve_inversezInverseLaplacian.solve_inverse:   rD   r9   c                     t        ||dz         D ]1  }| j                  |      | j                  || j                  z  dd f<   3 | j                  S Nr2   )r   rF   r*   r   )r7   r1r2rB   s       r   r#   zInverseLaplacian.get_rows=   sL    r26" 	;A%)%7%7%:DFF1tvv:qr>"	;vvr9   c                     | j                  |      | j                  || j                  z  dd f<   | j                  || j                  z     S rH   )rF   r*   r   rA   s     r   get_rowzInverseLaplacian.get_rowB   s@    !%!3!3A!6q466z12~vva$&&j!!r9   c                     d}t        |      D ]c  \  }}d}t        j                  |      d   }t        |      dkD  s/||z
  }|j	                         |j                         z
  dz   }t	        ||      }e |S )Nr   r2   )	enumerater&   nonzerolenmaxmin)r7   r)   mir-   r   yr   s           r   r4   zInverseLaplacian.widthF   sv    l 	FAsA

3#A1vzEEEGaeeg%)1I	 r9   )NN)
__name__
__module____qualname__r8   r6   rC   rF   r#   rL   r4   r;   r9   r   r0   r0   $   s%    33
"	r9   r0   c                       e Zd Zd Zd Zd Zy)r   c                     t         j                  |j                  | j                        | _        t         j
                  j                  | j                  j                               | j                  dd dd f<   y Nr   r2   )	r&   r!   r3   r   ILlinalginvr5   todenser<   s     r   r6   z FullInverseLaplacian.init_solverS   sK    ((177$**(5))--(9:ABr9   c                 z    t         j                  |j                  | j                        }| j                  |z  }|S )Nr   )r&   r!   r3   r   r]   r7   rhsss      r   rC   zFullInverseLaplacian.solveW   s.    HHSYYdjjH1GGcMr9   c                 (    | j                   |dd f   S rH   )r]   rA   s     r   rF   z"FullInverseLaplacian.solve_inverse\   s    wwq!"u~r9   NrW   rX   rY   r6   rC   rF   r;   r9   r   r   r   R   s    ;
r9   r   c                       e Zd Zd Zd Zd Zy)r   c                     dd l }|j                  j                  j                  | j                  j                               | _        y )Nr   )scipysparser^   
factorizedr5   tocsclusolve)r7   r)   sps      r   r6   z#SuperLUInverseLaplacian.init_solvera   s+    yy''22477==?Cr9   c                     t         j                  | j                  | j                        }d||<   | j	                  |dd        S r\   )r&   r!   r(   r   rm   r7   rB   rc   s      r   rF   z%SuperLUInverseLaplacian.solve_inversef   s:    hhtvvTZZh0A||CG$$r9   c                     t         j                  |j                  | j                        }| j	                  |dd        |dd  |S r\   )r&   r!   r3   r   rm   rb   s      r   rC   zSuperLUInverseLaplacian.solvek   s;    HHSYYdjjH1SW%!"r9   N)rW   rX   rY   r6   rF   rC   r;   r9   r   r   r   `   s    D
%
r9   r   c                       e Zd Zd Zd Zd Zy)r   c                 $   dd l at        j                  j                  j	                  | j
                  j                               }| j                  dz
  }t        j                  j                  j                  ||f|j                        | _
        y )Nr   r2   )r3   matvec)ri   rn   rj   r^   spilur5   rl   r(   LinearOperatorrC   M)r7   r)   ilur(   s       r   r6   zCGInverseLaplacian.init_solverr   s_    ii$$TWW]]_5FFQJ!!001vcii0Pr9   c                     t         j                  |j                  | j                        }t        j
                  j                  j                  | j                  |dd  | j                  d      d   |dd  |S )Nr   r2   r   rw   atol)
r&   r!   r3   r   rn   rj   r^   r   r5   rw   rb   s      r   rC   zCGInverseLaplacian.solvez   s]    HHSYYdjjH1		  ##DGGSWQ#GJ!"r9   c                     t         j                  | j                  | j                        }d||<   t        j
                  j                  j                  | j                  |dd  | j                  d      d   S )Nr2   r   rz   )
r&   r!   r(   r   rn   rj   r^   r   r5   rw   rp   s      r   rF   z CGInverseLaplacian.solve_inverse   sZ    hhtvvtzz*Ayy""477CGtvvA"FqIIr9   Nrf   r;   r9   r   r   r   q   s    Q
Jr9   r   )	networkxr   _dispatchablefloatr.   r0   r   r   r   r;   r9   r   <module>r      sf     X&"%  ':+ +\+ . "J) Jr9   