class_docstr: The auto-scheduler's computational graph and related program analyses.
  
  We convert a compute declaration described by `tvm.compute` (could be a single operator or a
  subgraph) to a ComputeDAG. It keeps the input/output tensors, all operations in the DAG, and
  some static analysis results for the DAG (e.g. the total float operation count,
  consumer/producer relations of operations, whether an operation stage should
  be tiled/compute inlined).
  These analyses can help the search policy to make decisions during the search.
  ComputeDAG is also responsible for the interaction between auto-scheduler's `LoopState` and
  TVM schedule (e.g. applying the `LoopState` transform steps to a TVM schedule, providing
  `LoopState` with extra information got from TVM schedule).
  
  Parameters
  ----------
  compute : Union[List[Tensor], str, tvm.te.Schedule]
      Input/output tensors or workload key for a compute declaration.
class_docstr_tok: ["The","auto-scheduler","'s","computational","graph","and","related","program","analyses",".","We","convert","a","compute","declaration","described","by","`","tvm.compute","`","(","could","be","a","single","operator","or","a","subgraph",")","to","a","ComputeDAG",".","It","keeps","the","input\/output","tensors",",","all","operations","in","the","DAG",",","and","some","static","analysis","results","for","the","DAG","(","e.g",".","the","total","float","operation","count",",","consumer\/producer","relations","of","operations",",","whether","an","operation","stage","should","be","tiled\/compute","inlined",")",".","These","analyses","can","help","the","search","policy","to","make","decisions","during","the","search",".","ComputeDAG","is","also","responsible","for","the","interaction","between","auto-scheduler","'s","`","LoopState","`","and","TVM","schedule","(","e.g",".","applying","the","`","LoopState","`","transform","steps","to","a","TVM","schedule",",","providing","`","LoopState","`","with","extra","information","got","from","TVM","schedule",")",".","Parameters","--","--","--","--","--","compute",":","Union","[","List","[","Tensor","]",",","str",",","tvm.te.Schedule","]","Input\/output","tensors","or","workload","key","for","a","compute","declaration","."]
docstr: Infer and fill the bound of all iterators of a state.
  
  The states may lose complete bound information after some transform steps
  (e.g., compute_at).
  We can call this function to infer and fill all the bound information.
  This function calls TVM InferBound pass internally to get the bound.
  The returned state of this function is guaranteed to have complete iterator extent
  information.
  
  Parameters
  ----------
  state : Union[State, StateObject]
      The state from which we get transform steps.
  
  Returns
  -------
  updated_state : State
      The State with complete bound information.
docstr_tok: ["Infer","and","fill","the","bound","of","all","iterators","of","a","state",".","The","states","may","lose","complete","bound","information","after","some","transform","steps","(","e.g.",",","compute_at",")",".","We","can","call","this","function","to","infer","and","fill","all","the","bound","information",".","This","function","calls","TVM","InferBound","pass","internally","to","get","the","bound",".","The","returned","state","of","this","function","is","guaranteed","to","have","complete","iterator","extent","information",".","Parameters","--","--","--","--","--","state",":","Union","[","State",",","StateObject","]","The","state","from","which","we","get","transform","steps",".","Returns","--","--","--","-","updated_state",":","State","The","State","with","complete","bound","information","."]
code: def infer_bound_from_state(self, state):
      """
      Infer and fill the bound of all iterators of a state.
  
      The states may lose complete bound information after some transform steps
      (e.g., compute_at).
      We can call this function to infer and fill all the bound information.
      This function calls TVM InferBound pass internally to get the bound.
      The returned state of this function is guaranteed to have complete iterator extent
      information.
  
      Parameters
      ----------
      state : Union[State, StateObject]
          The state from which we get transform steps.
  
      Returns
      -------
      updated_state : State
          The State with complete bound information.
      """
      state_obj = (
          state
          if isinstance(state, StateObject)
          else state.state_object
      )
      updated_state = State(
          _ffi_api.ComputeDAGInferBoundFromState(self, state_obj), self
      )
      # Copy the stage_id_map from the original state to make sure the old indices are still
      # valid
      if isinstance(state, State):
          for k, v in state.stage_id_map.items():
              updated_state.stage_id_map[k] = v
      return updated_state
  
imports: import hashlib
  import json
  import tvm._ffi
  from tvm.runtime import Object
  from tvm.runtime._ffi_node_api import LoadJSON, SaveJSON
  from .None import _ffi_api
  from .loop_state import State, StateObject
  from .utils import get_const_tuple
  from .workload_registry import workload_key_to_tensors
label_desc: Use image node_id 5 for calling the ComputeDAG obj's underlying member method code with example usage: obj.infer_bound_from_state(state) and returns: updated_state