docs: def pdf(cls, mass, log_mode=True):
          """ PDF for the Kroupa IMF.
  
          Normalization is set over the mass range from 0.1 Msun to 100 Msun
          """
          log_mass = np.log10(mass)
          # From Eq 2
          mb = mbreak  = [0.08, 0.5] # Msun
          a = alpha = [0.3, 1.3, 2.3] # alpha
  
          # Normalization set from 0.1 -- 100 Msun
          norm = 0.27947743949440446
  
          b = 1./norm
          c = b * mbreak[0]**(alpha[1]-alpha[0])
          d = c * mbreak[1]**(alpha[2]-alpha[1])
  
          dn_dm  = b * (mass < 0.08) * mass**(-alpha[0])
          dn_dm += c * (0.08 <= mass) * (mass < 0.5) * mass**(-alpha[1])
          dn_dm += d * (0.5  <= mass) * mass**(-alpha[2])
  
          if log_mode:
              # Number per logarithmic mass range, i.e., dN/dlog(M)
              return dn_dm * (mass * np.log(10))
          else:
              # Number per linear mass range, i.e., dN/dM
              return dn_dm