U
    3d                     @   s   d Z ddlZddlmZ ddlmZ dd Zdd Zd	d
 Z	dd Z
dd Zee	ee
edZdd Zdd Zdd Zdd ZeeeedZdd Zdd Zdd ZeeedZdS ) z)Utilities for the neural network modules
    N)expit)xlogyc                 C   s   dS )zSimply leave the input array unchanged.

    Parameters
    ----------
    X : {array-like, sparse matrix}, shape (n_samples, n_features)
        Data, where `n_samples` is the number of samples
        and `n_features` is the number of features.
    N Xr   r   @/tmp/pip-unpacked-wheel-zrfo1fqw/sklearn/neural_network/_base.pyinplace_identity   s    r   c                 C   s   t | | d dS )zCompute the logistic function inplace.

    Parameters
    ----------
    X : {array-like, sparse matrix}, shape (n_samples, n_features)
        The input data.
    outN)logistic_sigmoidr   r   r   r   inplace_logistic   s    r   c                 C   s   t j| | d dS )zCompute the hyperbolic tan function inplace.

    Parameters
    ----------
    X : {array-like, sparse matrix}, shape (n_samples, n_features)
        The input data.
    r	   N)nptanhr   r   r   r   inplace_tanh$   s    r   c                 C   s   t j| d| d dS )zCompute the rectified linear unit function inplace.

    Parameters
    ----------
    X : {array-like, sparse matrix}, shape (n_samples, n_features)
        The input data.
    r   r	   N)r   maximumr   r   r   r   inplace_relu/   s    r   c                 C   sN   | | j ddddtjf  }tj|| d | | jddddtjf  } dS )zCompute the K-way softmax function inplace.

    Parameters
    ----------
    X : {array-like, sparse matrix}, shape (n_samples, n_features)
        The input data.
       ZaxisNr	   )maxr   Znewaxisexpsum)r   tmpr   r   r   inplace_softmax:   s    r   )identityr   logisticreluZsoftmaxc                 C   s   dS )a  Apply the derivative of the identity function: do nothing.

    Parameters
    ----------
    Z : {array-like, sparse matrix}, shape (n_samples, n_features)
        The data which was output from the identity activation function during
        the forward pass.

    delta : {array-like}, shape (n_samples, n_features)
         The backpropagated error signal to be modified inplace.
    Nr   Zdeltar   r   r   inplace_identity_derivativeP   s    r   c                 C   s   || 9 }|d|  9 }dS )a  Apply the derivative of the logistic sigmoid function.

    It exploits the fact that the derivative is a simple function of the output
    value from logistic function.

    Parameters
    ----------
    Z : {array-like, sparse matrix}, shape (n_samples, n_features)
        The data which was output from the logistic activation function during
        the forward pass.

    delta : {array-like}, shape (n_samples, n_features)
         The backpropagated error signal to be modified inplace.
    r   Nr   r   r   r   r   inplace_logistic_derivative_   s    r    c                 C   s   |d| d  9 }dS )a  Apply the derivative of the hyperbolic tanh function.

    It exploits the fact that the derivative is a simple function of the output
    value from hyperbolic tangent.

    Parameters
    ----------
    Z : {array-like, sparse matrix}, shape (n_samples, n_features)
        The data which was output from the hyperbolic tangent activation
        function during the forward pass.

    delta : {array-like}, shape (n_samples, n_features)
         The backpropagated error signal to be modified inplace.
    r      Nr   r   r   r   r   inplace_tanh_derivativer   s    r"   c                 C   s   d|| dk< dS )a  Apply the derivative of the relu function.

    It exploits the fact that the derivative is a simple function of the output
    value from rectified linear units activation function.

    Parameters
    ----------
    Z : {array-like, sparse matrix}, shape (n_samples, n_features)
        The data which was output from the rectified linear units activation
        function during the forward pass.

    delta : {array-like}, shape (n_samples, n_features)
         The backpropagated error signal to be modified inplace.
    r   Nr   r   r   r   r   inplace_relu_derivative   s    r#   )r   r   r   r   c                 C   s   | | d   d S )a  Compute the squared loss for regression.

    Parameters
    ----------
    y_true : array-like or label indicator matrix
        Ground truth (correct) values.

    y_pred : array-like or label indicator matrix
        Predicted values, as returned by a regression estimator.

    Returns
    -------
    loss : float
        The degree to which the samples are correctly predicted.
    r!   )Zmean)y_trueZy_predr   r   r   squared_loss   s    r%   c                 C   s~   t |jj}t ||d| }|jd dkrBt jd| |dd}| jd dkrdt jd|  | dd} t| |  |jd  S )a  Compute Logistic loss for classification.

    Parameters
    ----------
    y_true : array-like or label indicator matrix
        Ground truth (correct) labels.

    y_prob : array-like of float, shape = (n_samples, n_classes)
        Predicted probabilities, as returned by a classifier's
        predict_proba method.

    Returns
    -------
    loss : float
        The degree to which the samples are correctly predicted.
    r   r   r   )	r   finfodtypeepsclipshapeappendr   r   r$   Zy_probr(   r   r   r   log_loss   s    r-   c                 C   sP   t |jj}t ||d| }t| | td|  d|    |jd  S )a!  Compute binary logistic loss for classification.

    This is identical to log_loss in binary classification case,
    but is kept for its use in multilabel case.

    Parameters
    ----------
    y_true : array-like or label indicator matrix
        Ground truth (correct) labels.

    y_prob : array-like of float, shape = (n_samples, 1)
        Predicted probabilities, as returned by a classifier's
        predict_proba method.

    Returns
    -------
    loss : float
        The degree to which the samples are correctly predicted.
    r   r   )r   r&   r'   r(   r)   r   r   r*   r,   r   r   r   binary_log_loss   s    $r.   )Zsquared_errorr-   r.   )__doc__Znumpyr   Zscipy.specialr   r   r   r   r   r   r   r   ZACTIVATIONSr   r    r"   r#   ZDERIVATIVESr%   r-   r.   ZLOSS_FUNCTIONSr   r   r   r   <module>   s<   	