
import numpy as np


def hellinger(data1, data2):
    '''
    Calculate the Hellinger Distance between two datasets.

    Parameters
    ----------
    data1 : numpy.ndarray
        1D array.
    data2 : numpy.ndarray
        1D array.

    Returns
    -------
    distance : float
        Distance value.
    '''
    distance = (1 / np.sqrt(2)) * \
        np.sqrt(np.nansum((np.sqrt(data1) - np.sqrt(data2)) ** 2.))
    return distance


def standardize(x):
    return (x - np.nanmean(x)) / np.nanstd(x)


import numpy as np


def hellinger(data1, data2):
    '''
    Calculate the Hellinger Distance between two datasets.

    Parameters
    ----------
    data1 : numpy.ndarray
        1D array.
    data2 : numpy.ndarray
        1D array.

    Returns
    -------
    distance : float
        Distance value.
    '''
    distance = (1 / np.sqrt(2)) * \
        np.sqrt(np.nansum((np.sqrt(data1) - np.sqrt(data2)) ** 2.))
    return distance


def standardize(x):
    return (x - np.nanmean(x)) / np.nanstd(x)


def kl_divergence(P, Q):
    '''
    Kullback Leidler Divergence

    Parameters
    ----------

    P,Q : numpy.ndarray
        Two Discrete Probability distributions

    Returns
    -------

    kl_divergence : float
    '''
    P = P[~np.isnan(P)]
    Q = Q[~np.isnan(Q)]
    P = P[np.isfinite(P)]
    Q = Q[np.isfinite(Q)]
    return np.nansum(np.where(Q != 0, P * np.log(P / Q), 0))

Move KL Div to utils file
Move KL Div to utils file

  
  import numpy as np
  
  
  def hellinger(data1, data2):
      '''
      Calculate the Hellinger Distance between two datasets.
  
      Parameters
      ----------
      data1 : numpy.ndarray
          1D array.
      data2 : numpy.ndarray
          1D array.
  
      Returns
      -------
      distance : float
          Distance value.
      '''
      distance = (1 / np.sqrt(2)) * \
          np.sqrt(np.nansum((np.sqrt(data1) - np.sqrt(data2)) ** 2.))
      return distance
  
  
  def standardize(x):
      return (x - np.nanmean(x)) / np.nanstd(x)
  
+ 
+ def kl_divergence(P, Q):
+     '''
+     Kullback Leidler Divergence
+ 
+     Parameters
+     ----------
+ 
+     P,Q : numpy.ndarray
+         Two Discrete Probability distributions
+ 
+     Returns
+     -------
+ 
+     kl_divergence : float
+     '''
+     P = P[~np.isnan(P)]
+     Q = Q[~np.isnan(Q)]
+     P = P[np.isfinite(P)]
+     Q = Q[np.isfinite(Q)]
+     return np.nansum(np.where(Q != 0, P * np.log(P / Q), 0))
+ 
Move KL Div to utils file
## Code Before:

import numpy as np


def hellinger(data1, data2):
    '''
    Calculate the Hellinger Distance between two datasets.

    Parameters
    ----------
    data1 : numpy.ndarray
        1D array.
    data2 : numpy.ndarray
        1D array.

    Returns
    -------
    distance : float
        Distance value.
    '''
    distance = (1 / np.sqrt(2)) * \
        np.sqrt(np.nansum((np.sqrt(data1) - np.sqrt(data2)) ** 2.))
    return distance


def standardize(x):
    return (x - np.nanmean(x)) / np.nanstd(x)

## Instruction:
Move KL Div to utils file
## Code After:

import numpy as np


def hellinger(data1, data2):
    '''
    Calculate the Hellinger Distance between two datasets.

    Parameters
    ----------
    data1 : numpy.ndarray
        1D array.
    data2 : numpy.ndarray
        1D array.

    Returns
    -------
    distance : float
        Distance value.
    '''
    distance = (1 / np.sqrt(2)) * \
        np.sqrt(np.nansum((np.sqrt(data1) - np.sqrt(data2)) ** 2.))
    return distance


def standardize(x):
    return (x - np.nanmean(x)) / np.nanstd(x)


def kl_divergence(P, Q):
    '''
    Kullback Leidler Divergence

    Parameters
    ----------

    P,Q : numpy.ndarray
        Two Discrete Probability distributions

    Returns
    -------

    kl_divergence : float
    '''
    P = P[~np.isnan(P)]
    Q = Q[~np.isnan(Q)]
    P = P[np.isfinite(P)]
    Q = Q[np.isfinite(Q)]
    return np.nansum(np.where(Q != 0, P * np.log(P / Q), 0))
