class_docstr: non-mutable structure that contains information about one side of expression (e.g. 'b c (h w)')
  and keeps some information important for downstream
docstr: Valid axes names are python identifiers except keywords,
  and additionally should not start or end with underscore
docstr_tok: ["Valid","axes","names","are","python","identifiers","except","keywords",",","and","additionally","should","not","start","or","end","with","underscore"]
code: def check_axis_name(name: str) -> bool:
      """
      Valid axes names are python identifiers except keywords,
      and additionally should not start or end with underscore
      """
      (
          is_valid,
          _reason,
      ) = ParsedExpression.check_axis_name_return_reason(name)
      return is_valid
  
file_path: einops/einops/parsing.py
imports: from einops import EinopsError
  import keyword
  import warnings
  from typing import List, Optional, Set, Tuple, Union
label_desc: Use image node_id 5 for calling the ParsedExpression obj's underlying member method code with example usage: obj.check_axis_name(name) and returns: is_valid