
    hE                         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                  UR                  R                  SU-  SS9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         ?offsets)numpyscipynxto_scipy_sparse_array_get_label_infoshapeNetworkXErrorzerossumsparse	csr_arraydiagstolilrangeargmaxtolist)Gmax_iterr   npspXlabels
label_dict	n_samples	n_classesFdegreesDPB_s                   Y/var/www/html/env/lib/python3.13/site-packages/networkx/algorithms/node_classification.pyr   r      sQ   Z 
  #A(7F||A!8BG
 	
 
I  #I
)'(A eeemGGqL
		BIIOOS7]QOGHA	
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                  UR                  R                  UR                  R                  SU-  SS95      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   sqrtr   r   r   r   r   r    )r!   alphar"   r   r#   r$   r%   r&   r'   r(   r)   r*   r+   D2r-   r.   r/   s                    r0   r   r   l   sR   ^ 
  #A(7F||A!8BG
 	
 
I  #I
)'(A eeemGGqL	$$RYY__cGma_%PQ	RBq&BA
)'(A$%IAQTlF1a4L !8_UaK  iii*+2244r1   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    r0   <lambda>!_get_label_info.<locals>.<lambda>   s    1r1   )key)r   	enumeratenodesappendarraysorteditems)r!   r   r#   r&   label_to_idlidinlabelr/   r'   s              r0   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
)   rH   )gGz?rI   rH   )
__doc__networkxr   __all__utilsnot_implemented_for_dispatchabler   r   r   r9   r1   r0   <module>rP      s   2  >
? j)\*H5 + *H5V j)\*I5 + *I5X! r1   