
    x-j=                     r    d Z ddlZddlZddlZddlmZ g ZddZddZ	ddZ
ddZddZdd	Zdd
ZddZdS )zFleet Metrics    N)Variablec                 p   |t           j                                        }|t           j        j        j        }t          | t                    r?t          j	        |
                    | j                                                            } nNt          | t                    r9t          j	        |
                    |                                                     } t          j	        | j                  }t          j        |           dz  }|                    | d          }|                    |          }|S )aU  
    distributed sum in fleet

    Args:
        input(numpy.array|Variable|string): output of a layer
        scope(Scope): specific scope

    Returns:
        global_metric(numpy.array): sum array

    Example:
        .. code-block:: python

            >>> # doctest: +REQUIRES(env:DISTRIBUTED)
            >>> # in model.py
            >>> input = paddle.cast(some_input, dtype='float32')
            >>> cnt = paddle.sum(input)
            >>> global_cnt = paddle.static.create_global_var(persistable=True, dtype='float32', shape=[], value=0)
            >>> tmp = paddle.add(cnt, global_cnt)
            >>> paddle.assign(tmp, global_cnt)

            >>> # in train.py, after train or infer
            >>> res = np.array(scope.find_var(global_cnt.name).get_tensor())
            >>> print("sum array: ", paddle.distributed.fleet.sum(res))
    Nr   sumpaddlestaticglobal_scopedistributedfleetutil
isinstancer   nparrayfind_varname
get_tensorstrshapecopy
all_reducereshapeinputscoper   	old_shapeoutputs        g/var/www/html/banglarbhumi/venv/lib/python3.11/site-packages/paddle/distributed/fleet/metrics/metric.pyr   r          4 }**,,|!',%"" =
33>>@@AA	E3		 =..99;;<<%%IWU^^aF__UE**F^^I&&FM    c                 p   |t           j                                        }|t           j        j        j        }t          | t                    r?t          j	        |
                    | j                                                            } nNt          | t                    r9t          j	        |
                    |                                                     } t          j	        | j                  }t          j        |           dz  }|                    | d          }|                    |          }|S )aY  
    distributed max in fleet

    Args:
        input(numpy.array|Variable|string): output of a layer
        scope(Scope): specific scope

    Returns:
        global_metric(numpy.array): max array

    Example:
        .. code-block:: python

            >>> # doctest: +REQUIRES(env:DISTRIBUTED)
            >>> # in model.py
            >>> input = paddle.cast(some_input, dtype='float32')
            >>> cnt = paddle.sum(input)
            >>> global_cnt = paddle.static.create_global_var(persistable=True, dtype='float32', shape=[], value=0)
            >>> tmp = paddle.maximum(cnt, global_cnt)
            >>> paddle.assign(tmp, global_cnt)

            >>> # in train.py, after train or infer
            >>> res = np.array(scope.find_var(global_cnt.name).get_tensor())
            >>> print("max array: ", paddle.distributed.fleet.max(res))
    Nr   maxr   r   s        r   r!   r!   C   r   r   c                 p   |t           j                                        }|t           j        j        j        }t          | t                    r?t          j	        |
                    | j                                                            } nNt          | t                    r9t          j	        |
                    |                                                     } t          j	        | j                  }t          j        |           dz  }|                    | d          }|                    |          }|S )aY  
    distributed min in fleet

    Args:
        input(numpy.array|Variable|string): output of a layer
        scope(Scope): specific scope

    Returns:
        global_metric(numpy.array): min array

    Example:
        .. code-block:: python

            >>> # doctest: +REQUIRES(env:DISTRIBUTED)
            >>> # in model.py
            >>> input = paddle.cast(some_input, dtype='float32')
            >>> cnt = paddle.sum(input)
            >>> global_cnt = paddle.static.create_global_var(persistable=True, dtype='float32', shape=[], value=0)
            >>> tmp = paddle.minimum(cnt, global_cnt)
            >>> paddle.assign(tmp, global_cnt)

            >>> # in train.py, after train or infer
            >>> res = np.array(scope.find_var(global_cnt.name).get_tensor())
            >>> print("min array: ", paddle.distributed.fleet.min(res))
    Nr   minr   r   s        r   r#   r#   l   r   r   c                    |t           j                                        }|t           j        j        j        }t          | t                    r?t          j	        |
                    | j                                                            } nNt          | t                    r9t          j	        |
                    |                                                     } t          |t                    r?t          j	        |
                    |j                                                            }nNt          |t                    r9t          j	        |
                    |                                                    }t          j	        | j                  }|                     d          } t          j        |           dz  }|                    | d          }|                    |          }t          j	        |j                  }|                    d          }t          j        |          dz  }|                    |d          }|                    |          }t%          |d                   }d}	d}
d}d}d}d}t'          |          D ]c}|dz
  |z
  }|
|d         |         z   }||d         |         z  }||d         |         z   }||d         |         z  }|	||z
  |
|z   z  dz  z  }	|}
|}dd}|
|z  dk    s|dk    rd}n|	|
|z  z  }|S )	a  
    distributed auc in fleet

    Args:
        stat_pos(numpy.array|Variable|string): stat_pos in output of paddle.static.auc
        stat_neg(numpy.array|Variable|string): stat_neg in output of paddle.static.auc
        scope(Scope): specific scope

    Returns:
        auc_value(float): auc value

    Example:
        .. code-block:: python

            >>> # doctest: +REQUIRES(env:DISTRIBUTED)
            >>> # in model.py
            >>> similarity_norm = paddle.nn.functional.sigmoid(paddle.clip(output, min=-15.0, max=15.0))
            >>> binary_predict = paddle.concat(
            ...     input=[paddle.subtract(paddle.ceil(similarity_norm), similarity_norm), similarity_norm], axis=1)
            >>> self.auc, batch_auc, [batch_stat_pos, batch_stat_neg, stat_pos, stat_neg] =
            ...     paddle.static.auc(input=binary_predict, label=label, curve='ROC', num_thresholds=4096)

            >>> # in train.py, after train or infer
            >>> pos = np.array(scope.find_var(stat_pos.name).get_tensor())
            >>> neg = np.array(scope.find_var(stat_neg.name).get_tensor())
            >>> print("auc: ", paddle.distributed.fleet.auc(pos, neg))
    Nr   r   g              g      ?)r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   lenrange)stat_posstat_negr   r   old_pos_shape
global_posold_neg_shape
global_neg
num_bucketareaposnegnew_posnew_negtotal_ins_numiindex	auc_values                     r   aucr:      s   8 }**,,|!',(H%% C8ENN8=99DDFFGG	Hc	"	" C8ENN844??AABB(H%% C8ENN8=99DDFFGG	Hc	"	" C8ENN844??AABBHX^,,M##H""Q&J511J##M22J HX^,,M##H""Q&J511J##M22J Z]##JD
C
CGGM:  Q"
1e,,Au--
1e,,Au--33=1A55I
SyA~~!++		C#I&	r   c                 `   |t           j                                        }|t           j        j        j        }t          | t                    r?t          j	        |
                    | j                                                            } nNt          | t                    r9t          j	        |
                    |                                                     } t          |t                    r?t          j	        |
                    |j                                                            }nNt          |t                    r9t          j	        |
                    |                                                    }t          j	        | j                  }|                     d          } t          j        |           dz  }|                    | d          }|                    |          }|                    |d          }t%          |d                   t%          |d                   z  }|S )a  
    distributed mae in fleet

    Args:
        abserr(numpy.array|Variable|string): abserr in output of paddle.static.ctr_metric_bundle
        total_ins_num(numpy.array|Variable|string): total variable
        scope(Scope): specific scope

    Returns:
        mae(float): mae value

    Example:
        .. code-block:: python

            >>> # doctest: +REQUIRES(env:DISTRIBUTED)
            >>> # in model.py
            >>> sqrerr, abserr, prob, q, pos, total = paddle.static.ctr_metric_bundle(similarity_norm, paddle.cast(x=label, dtype='float32'))

            >>> # in train.py, after train or infer
            >>> res = np.array(scope.find_var(abserr.name).get_tensor())
            >>> print("mae: ", paddle.distributed.fleet.mae(res, total_ins_num))
    Nr%   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   float)abserrr6   r   r   old_metric_shapeglobal_metricglobal_total_num	mae_values           r   maerC      s   . }**,,|!',&(## ?%..55@@BBCC	FC	 	  ?%..00;;==>>-** MNN=-..99;;
 
 
M3	'	' M!>!>!I!I!K!KLLx--^^BFGFOOa'MOOFE22M!))*:;;M}e<<mA&''%0@0C*D*DDIr   c                    |t           j                                        }|t           j        j        j        }t          | t                    r?t          j	        |
                    | j                                                            } nNt          | t                    r9t          j	        |
                    |                                                     } t          |t                    r?t          j	        |
                    |j                                                            }nNt          |t                    r9t          j	        |
                    |                                                    }t          j	        | j                  }|                     d          } t          j        |           dz  }|                    | d          }|                    |          }|                    |d          }t%          j        t)          |d                   t)          |d                   z            }|S )a  
    distributed rmse in fleet

    Args:
        sqrerr(numpy.array|Variable|string): sqrerr in output of paddle.static.ctr_metric_bundle
        total_ins_num(numpy.array|Variable|string): total variable
        scope(Scope): specific scope

    Returns:
        rmse(float): rmse value

    Example:
        .. code-block:: python

            >>> # doctest: +REQUIRES(env:DISTRIBUTED)
            >>> # in model.py
            >>> sqrerr, abserr, prob, q, pos, total = paddle.static.ctr_metric_bundle(similarity_norm, paddle.cast(x=label, dtype='float32'))

            >>> # in train.py, after train or infer
            >>> res = np.array(scope.find_var(sqrerr.name).get_tensor())
            >>> print("rmse: ", paddle.distributed.fleet.rmse(res, total_ins_num))
    Nr%   r   r   )r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   mathsqrtr=   )sqrerrr6   r   r   r?   r@   rA   
rmse_values           r   rmserI     s   . }**,,|!',&(## ?%..55@@BBCC	FC	 	  ?%..00;;==>>-** MNN=-..99;;
 
 
M3	'	' M!>!>!I!I!K!KLLx--^^BFGFOOa'MOOFE22M!))*:;;M}e<<5q!122U;KA;N5O5OOPPJr   c                 `   |t           j                                        }|t           j        j        j        }t          | t                    r?t          j	        |
                    | j                                                            } nNt          | t                    r9t          j	        |
                    |                                                     } t          |t                    r?t          j	        |
                    |j                                                            }nNt          |t                    r9t          j	        |
                    |                                                    }t          j	        | j                  }|                     d          } t          j        |           dz  }|                    | d          }|                    |          }|                    |d          }t%          |d                   t%          |d                   z  }|S )a  
    distributed mse in fleet

    Args:
        sqrerr(numpy.array|Variable|string): sqrerr in output of paddle.static.ctr_metric_bundle
        total_ins_num(numpy.array|Variable|string): total variable
        scope(Scope): specific scope

    Returns:
        mse(float): mse value

    Example:
        .. code-block:: python

            >>> # doctest: +REQUIRES(env:DISTRIBUTED)
            >>> # in model.py
            >>> sqrerr, abserr, prob, q, pos, total = paddle.static.ctr_metric_bundle(similarity_norm, paddle.cast(x=label, dtype='float32'))

            >>> # in train.py, after train or infer
            >>> metric = np.array(scope.find_var(sqrerr.name).get_tensor())
            >>> print("mse: ", paddle.distributed.fleet.mse(metric, total_ins_num))
    Nr%   r   r   r<   )rG   r6   r   r   r?   r@   rA   	mse_values           r   mserL   O  s   . }**,,|!',&(## ?%..55@@BBCC	FC	 	  ?%..00;;==>>-** MNN=-..99;;
 
 
M3	'	' M!>!>!I!I!K!KLLx--^^BFGFOOa'MOOFE22M!))*:;;M}e<<mA&''%0@0C*D*DDIr   c                    |t           j                                        }|t           j        j        j        }t          | t                    r?t          j	        |
                    | j                                                            } nNt          | t                    r9t          j	        |
                    |                                                     } t          |t                    r?t          j	        |
                    |j                                                            }nNt          |t                    r9t          j	        |
                    |                                                    }t          j        |           dz  }t          j        |          dz  }|                    | d          }|                    |d          }t!          |d                   t!          |d                   z  S )a  
    distributed accuracy in fleet

    Args:
        correct(numpy.array|Variable|string): correct Variable
        total(numpy.array|Variable): total Variable
        scope(Scope): specific scope

    Returns:
        acc(float): accuracy value

    Example:
        .. code-block:: python

            >>> # doctest: +REQUIRES(env:DISTRIBUTED)
            >>> # in model.py
            >>> correct = paddle.static.create_global_var(dtype='float32', shape=[1], value=0)
            >>> total = paddle.static.create_global_var(dtype='float32', shape=[1], value=0)
            >>> acc = paddle.metric.accuracy(predict, label, k=1, correct=correct, total=total)

            >>> global_correct = paddle.static.create_global_var(persistable=True, dtype='float32', shape=[1], value=0)
            >>> tmp1 = paddle.minimum(correct, global_correct)
            >>> paddle.assign(tmp1, global_correct)

            >>> global_total = paddle.static.create_global_var(persistable=True, dtype='float32', shape=[1], value=0)
            >>> tmp2 = paddle.minimum(total, global_total)
            >>> paddle.assign(tmp2, global_total)

            >>> # in train.py, after train or infer
            >>> correct_num = np.array(scope.find_var(correct.name).get_tensor())
            >>> total_num = np.array(scope.find_var(total.name).get_tensor())
            >>> print("accuracy: ", paddle.distributed.fleet.acc(correct_num, total_num))
    Nr   r   )r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r=   )correcttotalr   r   global_correct_numrA   s         r   accrQ     s   D }**,,|!','8$$ A(5>>',77BBDDEE	GS	!	! A(5>>'22==??@@%"" =
33>>@@AA	E3		 =..99;;<<))A-wu~~)%88ue44#A&''%0@0C*D*DDDr   )NN)__doc__rE   numpyr   r   paddle.common_ops_importr   __all__r   r!   r#   r:   rC   rI   rL   rQ    r   r   <module>rW      s            - - - - - -
& & & &R& & & &R& & & &RQ Q Q Qh0 0 0 0f0 0 0 0f/ / / /d6E 6E 6E 6E 6E 6Er   