code: def get_mx(self, tree: Union[ast.Symbol, ast.ComponentRef, ast.Expression]) -> ca.MX:
          
          if tree not in self.src:
              if isinstance(tree, ast.Symbol):
                  s = self.get_symbol(tree)
              elif isinstance(tree, ast.ComponentRef):
                  s = self.get_component(tree)
              else:
                  raise Exception('Tried to look up expression before it was reached by the tree walker')
              self.src[tree] = s
          return self.src[tree]
docs: We pull components and symbols from the AST on demand.
          This is to ensure that parametrized vector dimensions can be resolved.  Vector
          dimensions need to be known at CasADi MX creation time.
          :param tree:
          :return: