docs: def check_constraints(self):
          """
          Checks the following constraints:
  
          * minimum magnitude is positive.
          * ``b`` value is positive.
          * characteristic magnitude is positive
          * characteristic rate is positive
          * bin width is in the range (0, 0.5] to allow for at least one bin
            representing the characteristic distribution
          * characteristic magnitude minus 0.25 (that is the maximum magnitude
            of the G-R distribution) is greater than the minimum magnitude by at
            least one magnitude bin.
          * rate of events at the characteristic magnitude is equal to the
            rate of events for magnitude equal to m_prime - 1. This is done
            by asserting the equality (up to 7 digit precision) ::
  
              10 ** (a_incr - b * (m' - 1)) == char_rate / 0.5
  
            where ``a_incr`` is the incremental a value obtained from the
            cumulative a value using the following formula ::
  
              a_incr = a_val + log10(b_val * ln(10))
  
            and ``m' - 1 = char_mag - 1.25``
          """
          if not self.min_mag > 0:
              raise ValueError('minimum magnitude must be positive')
  
          if not self.b_val > 0:
              raise ValueError('b value must be positive')
  
          if not self.char_mag > 0:
              raise ValueError('characteristic magnitude must be positive')
  
          if not self.char_rate > 0:
              raise ValueError('characteristic rate must be positive')
  
          if not 0 < self.bin_width <= DELTA_CHAR:
              err_msg = 'bin width must be in the range (0, %s] to allow for ' \
                        'at least one magnitude bin representing the ' \
                        'characteristic distribution' % DELTA_CHAR
              raise ValueError(err_msg)
  
          if not self.char_mag - DELTA_CHAR / 2 >= self.min_mag + self.bin_width:
              err_msg = 'Maximum magnitude of the G-R distribution (char_mag ' \
                        '- 0.25) must be greater than the minimum magnitude ' \
                        'by at least one magnitude bin.'
              raise ValueError(err_msg)
  
          a_incr = self.a_val + numpy.log10(self.b_val * numpy.log(10))
          actual = 10 ** (a_incr - self.b_val * (self.char_mag - 1.25))
          desired = self.char_rate / DELTA_CHAR
          if not numpy.allclose(actual, desired, rtol=0.0, atol=1e-07):
              err_msg = 'Rate of events at the characteristic magnitude is ' \
                        'not equal to the rate of events for magnitude equal ' \
                        'to char_mag - 1.25'
              raise ValueError(err_msg)