parameters: (self, cpp_class_name)
return_statement: return None if parameter_index < 0 else cpp_class_name[:parameter_index]
docstring: Extracts the template name when the class is a renamed C++ template.
  
      We only want to check for `::` in the class/template name but not in the
      template parameters:
      - "class `Foo<namespace::Type>` as PyFoo" is valid,
      - "class `namespace::Foo` as PyFoo" is not valid,
      - "class `namespace::Foo<Type>` as PyFoo" is not valid.
  
      Args:
        cpp_class_name: The name of the cpp class, i.e. `Class` or
          `Template<...>`.
      Returns:
        The base name of the template (left of first "<") when
        cpp_class_name is templated, None otherwise.
docstring_summary: Extracts the template name when the class is a renamed C++ template.
docstring_tokens: Extracts the template name when the class is a renamed C ++ template .
function: def _extract_template_base_name(self, cpp_class_name):
      """Extracts the template name when the class is a renamed C++ template.
  
      We only want to check for `::` in the class/template name but not in the
      template parameters:
      - "class `Foo<namespace::Type>` as PyFoo" is valid,
      - "class `namespace::Foo` as PyFoo" is not valid,
      - "class `namespace::Foo<Type>` as PyFoo" is not valid.
  
      Args:
        cpp_class_name: The name of the cpp class, i.e. `Class` or
          `Template<...>`.
      Returns:
        The base name of the template (left of first "<") when
        cpp_class_name is templated, None otherwise.
      """
      parameter_index = cpp_class_name.find('<')
      return None if parameter_index < 0 else cpp_class_name[:parameter_index]
function_tokens: def _extract_template_base_name ( self , cpp_class_name ) : parameter_index = cpp_class_name . find ( '<' ) return None if parameter_index < 0 else cpp_class_name [ : parameter_index ]