
    9iA                         S r SSKrSS/r\R                  R                  S5      \R                  " SS9SS j5       5       r\R                  R                  S5      \R                  " SS9SS	 j5       5       rS
 r	g)a  This module provides the functions for node classification problem.

The functions in this module are not imported
into the top level `networkx` namespace.
You can access these functions by importing
the `networkx.algorithms.node_classification` modules,
then accessing the functions as attributes of `node_classification`.
For example:

  >>> from networkx.algorithms import node_classification
  >>> G = nx.path_graph(4)
  >>> G.edges()
  EdgeView([(0, 1), (1, 2), (2, 3)])
  >>> G.nodes[0]["label"] = "A"
  >>> G.nodes[3]["label"] = "B"
  >>> node_classification.harmonic_function(G)
  ['A', 'A', 'B', 'B']

References
----------
Zhu, X., Ghahramani, Z., & Lafferty, J. (2003, August).
Semi-supervised learning using gaussian fields and harmonic functions.
In ICML (Vol. 3, pp. 912-919).
    Nharmonic_functionlocal_and_global_consistencydirected
label_name)
node_attrsc                    SSK nSSKn[        R                  " U 5      n[	        X5      u  pgUR
                  S   S:X  a  [        R                  " SU S35      eUR
                  S   nUR
                  S   n	UR                  X45      n
UR                  SS9nSXS:H  '   UR                  R                  SU-  S4X4S9R                  5       nX-  R                  5       nSXSS2S4   '   UR                  X45      nSXSS2S4   USS2S4   4'   [        U5       H
  nX-  U-   n
M     XsR                  U
SS9   R                  5       $ )	a  Node classification by Harmonic function

Function for computing Harmonic function algorithm by Zhu et al.

Parameters
----------
G : NetworkX Graph
max_iter : int
    maximum number of iterations allowed
label_name : string
    name of target labels to predict

Returns
-------
predicted : list
    List of length ``len(G)`` with the predicted labels for each node.

Raises
------
NetworkXError
    If no nodes in `G` have attribute `label_name`.

Examples
--------
>>> from networkx.algorithms import node_classification
>>> G = nx.path_graph(4)
>>> G.nodes[0]["label"] = "A"
>>> G.nodes[3]["label"] = "B"
>>> G.nodes(data=True)
NodeDataView({0: {'label': 'A'}, 1: {}, 2: {}, 3: {'label': 'B'}})
>>> G.edges()
EdgeView([(0, 1), (1, 2), (2, 3)])
>>> predicted = node_classification.harmonic_function(G)
>>> predicted
['A', 'A', 'B', 'B']

References
----------
Zhu, X., Ghahramani, Z., & Lafferty, J. (2003, August).
Semi-supervised learning using gaussian fields and harmonic functions.
In ICML (Vol. 3, pp. 912-919).
r   N*No node on the input graph is labeled by ''.axis         ?shape)numpyscipynxto_scipy_sparse_array_get_label_infor   NetworkXErrorzerossumsparse	dia_arraytocsrtolilrangeargmaxtolist)Gmax_iterr   npspXlabels
label_dict	n_samples	n_classesFdegreesDPB_s                   g/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/networkx/algorithms/node_classification.pyr   r      sV   Z 
  #A(7F||A!8BG
 	
 
I  #I
)'(A eeemGGqL
		S7]A.y6LMSSUA	
AAQTlO
)'(A$%AQTlF1a4L !8_UaK  iii*+2244    c                    SSK nSSKn[        R                  " U 5      n[	        X5      u  pxUR
                  S   S:X  a  [        R                  " SU S35      eUR
                  S   n	UR
                  S   n
UR                  X45      nUR                  SS9nSXS:H  '   UR                  R                  SUR                  U5      -  S4X4S9R                  5       nXU-  U-  -  nUR                  X45      nSU-
  XSS2S4   USS2S4   4'   [        U5       H
  nX-  U-   nM     XR                  USS9   R                  5       $ )	u[  Node classification by Local and Global Consistency

Function for computing Local and global consistency algorithm by Zhou et al.

Parameters
----------
G : NetworkX Graph
alpha : float
    Clamping factor
max_iter : int
    Maximum number of iterations allowed
label_name : string
    Name of target labels to predict

Returns
-------
predicted : list
    List of length ``len(G)`` with the predicted labels for each node.

Raises
------
NetworkXError
    If no nodes in `G` have attribute `label_name`.

Examples
--------
>>> from networkx.algorithms import node_classification
>>> G = nx.path_graph(4)
>>> G.nodes[0]["label"] = "A"
>>> G.nodes[3]["label"] = "B"
>>> G.nodes(data=True)
NodeDataView({0: {'label': 'A'}, 1: {}, 2: {}, 3: {'label': 'B'}})
>>> G.edges()
EdgeView([(0, 1), (1, 2), (2, 3)])
>>> predicted = node_classification.local_and_global_consistency(G)
>>> predicted
['A', 'A', 'B', 'B']

References
----------
Zhou, D., Bousquet, O., Lal, T. N., Weston, J., & Schölkopf, B. (2004).
Learning with local and global consistency.
Advances in neural information processing systems, 16(16), 321-328.
r   Nr	   r
   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   sqrtr   r   r   r   )r    alphar!   r   r"   r#   r$   r%   r&   r'   r(   r)   r*   D2r,   r-   r.   s                    r/   r   r   k   s`   ^ 
  #A(7F||A!8BG
 	
 
I  #I
)'(A eeemGGqL				rwww	#I+A 
 
eg  	q&BA
)'(A$%IAQTlF1a4L !8_UaK  iii*+2244r0   c                 p   SSK n/ n0 nSn[        U R                  SS95       H:  u  pgXS   ;   d  M  US   U   nX;  a	  XTU'   US-  nUR                  XdU   /5        M<     UR	                  U5      nUR	                  [        UR                  5       S S9 VV	s/ s H  u  pUPM	     sn	n5      n
X:4$ s  sn	nf )a  Get and return information of labels from the input graph

Parameters
----------
G : Network X graph
label_name : string
    Name of the target label

Returns
-------
labels : numpy array, shape = [n_labeled_samples, 2]
    Array of pairs of labeled node ID and label ID
label_dict : numpy array, shape = [n_classes]
    Array of labels
    i-th element contains the label corresponding label ID `i`
r   NT)datar   c                     U S   $ )Nr    )xs    r/   <lambda>!_get_label_info.<locals>.<lambda>   s    1r0   )key)r   	enumeratenodesappendarraysorteditems)r    r   r"   r%   label_to_idlidinlabelr.   r&   s              r/   r   r      s    " FK
C!''t',-1aD$E'%(E"qMM1%012 . XXfF%k&7&7&9~NON85NOJ  	Ps   B2
)   rG   )gGz?rH   rG   )
__doc__networkxr   __all__utilsnot_implemented_for_dispatchabler   r   r   r8   r0   r/   <module>rO      s   2  >
? j)\*G5 + *G5T j)\*J5 + *J5Z! r0   