docs: def chi_square(h1, h2): # 23 us @array, 49 us @list \w 100
      r"""
      Chi-square distance.
      
      Measure how unlikely it is that one distribution (histogram) was drawn from the
      other. The Chi-square distance between two histograms :math:`H` and :math:`H'` of size
      :math:`m` is defined as:
      
      .. math::
      
          d_{\chi^2}(H, H') = \sum_{m=1}^M
              \frac{
                  (H_m - H'_m)^2
              }{
                  H_m + H'_m
              }
      
      *Attributes:*
  
      - semimetric
      
      *Attributes for normalized histograms:*
  
      - :math:`d(H, H')\in[0, 2]`
      - :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.
      
      Returns
      -------
      chi_square : float
          Chi-square distance.
      """
      h1, h2 = __prepare_histogram(h1, h2)
      old_err_state = scipy.seterr(invalid='ignore') # divide through zero only occurs when the bin is zero in both histograms, in which case the division is 0/0 and leads to (and should lead to) 0
      result = scipy.square(h1 - h2) / (h1 + h2)
      scipy.seterr(**old_err_state)
      result[scipy.isnan(result)] = 0 # faster than scipy.nan_to_num, which checks for +inf and -inf also
      return scipy.sum(result)