code: def jensen_shannon(h1, h2): # 85 us @array, 110 us @list \w 100 bins
      r
      h1, h2 = __prepare_histogram(h1, h2)
      s = (h1 + h2) / 2.
      return __kullback_leibler(h1, s) / 2. + __kullback_leibler(h2, s) / 2.
docs: r"""
      Jensen-Shannon divergence.
      
      A symmetric and numerically more stable empirical extension of the Kullback-Leibler
      divergence.
      
      The Jensen Shannon divergence between two histograms :math:`H` and :math:`H'` of size
      :math:`m` is defined as:
      
      .. math::
      
          d_{JSD}(H, H') =
              \frac{1}{2} d_{KL}(H, H^*) +
              \frac{1}{2} d_{KL}(H', H^*)
      
      with :math:`H^*=\frac{1}{2}(H + H')`.
      
      *Attributes:*
  
      - semimetric
      
      *Attributes for normalized histograms:*
  
      - :math:`d(H, H')\in[0, 1]`
      - :math:`d(H, H) = 0`
      - :math:`d(H, H') = d(H', H)`
      
      *Attributes for not-normalized histograms:*
  
      - :math:`d(H, H')\in[0, \infty)`
      - :math:`d(H, H) = 0`
      - :math:`d(H, H') = d(H', H)`
      
      *Attributes for not-equal histograms:*
  
      - not applicable
      
      Parameters
      ----------
      h1 : sequence
          The first histogram.
      h2 : sequence
          The second histogram, same bins as ``h1``.
      
      Returns
      -------
      jensen_shannon : float
          Jensen-Shannon divergence.