code: def roche_misaligned_critical_requiv(q, F, d, s, scale=1.0):
      
      volume_critical = libphoebe.roche_misaligned_critical_volume(q, F, d, s)
      logger.debug("libphoebe.roche_misaligned_critical_volume(q={}, F={}, d={}, s={}) => {}".format(q, F, d, s, volume_critical))
  
      requiv_critical = scale * (volume_critical * 3./4 * 1./np.pi)**(1./3)
      # logger.debug("roche.roche_misaligned_critical_requiv = {}".format(requiv_critical))
  
      return requiv_critical
docs: NOTE: output is in units of scale (so constraints will use SI)
      NOTE: q should already be flipped (i.e. the output of q_for_component) if necessary
      NOTE: s should be in roche coordinates at the applicable time/true anomaly