docs: def from_camel_case(s):
      """
      Convert names in camel case into underscore (_) separated names
  
      :param s: string in CamelCase notation
      :returns: string in under_score notation
  
      Example:
  
      >>> from_camel_case("TableName") # yields "table_name"
  
      """
  
      def convert(match):
          return ('_' if match.groups()[0] else '') + match.group(0).lower()
  
      if not re.match(r'[A-Z][a-zA-Z0-9]*', s):
          raise DataJointError(
              'ClassName must be alphanumeric in CamelCase, begin with a capital letter')
      return re.sub(r'(\B[A-Z])|(\b[A-Z])', convert, s)