docstr: Utility generator function to get subscript slice constants.
  
  Args:
      operand_node (ast.expr):
          The node to be tokenized.
  Yields:
      str: Token string.
  
  Examples:
      >>> code = '''
      ... foo = [1, [2, 3], [[4, 5], [6, 7]]]
      ... print(foo[2][1][0])
      ... '''
      >>> tree = ast.parse(code)
      >>> res = CodeManager._tokenize_operand(tree.body[1].value.args[0])
      >>> print(list(res))
      ['foo', 2, 1, 0]
docstr_tok: ["Utility","generator","function","to","get","subscript","slice","constants",".","Args",":","operand_node","(","ast.expr",")",":","The","node","to","be","tokenized",".","Yields",":","str",":","Token","string",".","Examples",":",">",">",">","code","=","``","'","...","foo","=","[","1",",","[","2",",","3","]",",","[","[","4",",","5","]",",","[","6",",","7","]","]","]","...","print","(","foo","[","2","]","[","1","]","[","0","]",")","...","``","'",">",">",">","tree","=","ast.parse","(","code",")",">",">",">","res","=","CodeManager._tokenize_operand","(","tree.body","[","1","]",".value.args","[","0","]",")",">",">",">","print","(","list","(","res",")",")","[","'foo","'",",","2",",","1",",","0","]"]
code: def _tokenize_operand(
      operand_node: ast.expr,
  ) -> Generator[str, None, None]:
      """
      Utility generator function to get subscript slice constants.
  
      Args:
          operand_node (ast.expr):
              The node to be tokenized.
      Yields:
          str: Token string.
  
      Examples:
          >>> code = '''
          ... foo = [1, [2, 3], [[4, 5], [6, 7]]]
          ... print(foo[2][1][0])
          ... '''
          >>> tree = ast.parse(code)
          >>> res = CodeManager._tokenize_operand(tree.body[1].value.args[0])
          >>> print(list(res))
          ['foo', 2, 1, 0]
      """
      if isinstance(operand_node, ast.Subscript):
          slice_ = operand_node.slice.value
          yield from CodeManager._tokenize_operand(operand_node.value)
          yield slice_
  
      if isinstance(operand_node, ast.Name):
          yield operand_node.id
  
      if isinstance(operand_node, ast.Constant):
          yield operand_node.value
  
imports: import re
  import ast
  import uuid
  from collections import defaultdict
  import astor
  import pandas
  from pandasai.helpers.path import find_project_root
  from pandasai.helpers.skills_manager import SkillsManager
  from pandasai.helpers.sql import extract_table_names
  from .node_visitors import AssignmentVisitor, CallVisitor
  from .save_chart import add_save_chart
  from .optional import import_dependency
  from ..exceptions import BadImportError, MaliciousQueryError, NoResultFoundError, InvalidConfigError
  from ..constants import WHITELISTED_BUILTINS, WHITELISTED_LIBRARIES
  from typing import Union, List, Generator, Any
  from ..helpers.logger import Logger
  from ..schemas.df_config import Config
  import logging
  import traceback
label_desc: Use image node_id 17 for calling the CodeManager obj's underlying member method code with example usage: obj._tokenize_operand(operand_node) without return types