class_docstr: Var represents the outputs of an Operation. Most Vars are derived from an
  Operation (including const), and all Vars must have `sym_type`.
  
  Example Usage:
  
  from coremltools.converters.mil.mil import (
      Builder as mb,
      Function,
      types
  )
  
  func_inputs = {"a": mb.placeholder(shape=(1,2)),
                 "b": mb.placeholder(shape=(1,2)) }
  with Function(func_inputs) as ssa_func:
      a, b = ssa_func.inputs["a"], ssa_func.inputs["b"]
      res = mb.add(x=a, y=b) # res is Var
      assert types.is_tensor(res.sym_type)
      assert res.rank == 2
      assert res.dtype == types.float # since a, b are by default float
  
      # value is not available at compile time in this  case. If
      # materializable, res.val would be a numpy / primitive value
      assert res.val is None
  
  
  Comment: Except InternalVar and Vars created in while_loop and by
  placeholder, all Var should only be constructed by Operation to represent
  outputs.
  
  Comment: Var hides the details of sym_type vs sym_val vs materialized
  value, which was represented by 2 objects prior to refactoring.
  
  
  # Properties:
  
  name: (str)
      name in MIL proto NamedValueType. Name is assigned by the parent
      Operation.
  
  sym_type [_sym_type]: (builtin type class)
      All Var must have a (possibly symbolic) type, usually derived from
      type inference of upstream ops or from default values in _Input.
  
  sym_val [_sym_val]: (builtin type instance)
      Possibly symbolic value.
  
  val [_sym_val]: (np.ndarray or python primitive scalar)
      Numpy (scalar / tensor) value. `val` is not None iff `sym_val` is
      not None and does not contain symbols.  Read-only.
  
  op [_op]: (Operation)
      The Operation this Var is derived from. May not be None except
      for InternalVar. Read-only.
  
  op_output_idx: (int)
      Idx of the output from Operation corresponding to _Input.  May be
      None.
  
  child_ops [_child_ops]: list[Operation]
      Ops that take this Var as an input.
  
  nonreplaceable_vars_upstream: set[Var]
      Set that consists of nonreplaceable vars upstream
class_docstr_tok: ["Var","represents","the","outputs","of","an","Operation",".","Most","Vars","are","derived","from","an","Operation","(","including","const",")",",","and","all","Vars","must","have","`","sym_type","`",".","Example","Usage",":","from","coremltools.converters.mil.mil","import","(","Builder","as","mb",",","Function",",","types",")","func_inputs","=","{","``","a","''",":","mb.placeholder","(","shape=","(","1,2",")",")",",","``","b","''",":","mb.placeholder","(","shape=","(","1,2",")",")","}","with","Function","(","func_inputs",")","as","ssa_func",":","a",",","b","=","ssa_func.inputs","[","``","a","''","]",",","ssa_func.inputs","[","``","b","''","]","res","=","mb.add","(","x=a",",","y=b",")","#","res","is","Var","assert","types.is_tensor","(","res.sym_type",")","assert","res.rank","==","2","assert","res.dtype","==","types.float","#","since","a",",","b","are","by","default","float","#","value","is","not","available","at","compile","time","in","this","case",".","If","#","materializable",",","res.val","would","be","a","numpy","\/","primitive","value","assert","res.val","is","None","Comment",":","Except","InternalVar","and","Vars","created","in","while_loop","and","by","placeholder",",","all","Var","should","only","be","constructed","by","Operation","to","represent","outputs",".","Comment",":","Var","hides","the","details","of","sym_type","vs","sym_val","vs","materialized","value",",","which","was","represented","by","2","objects","prior","to","refactoring",".","#","Properties",":","name",":","(","str",")","name","in","MIL","proto","NamedValueType",".","Name","is","assigned","by","the","parent","Operation",".","sym_type","[","_sym_type","]",":","(","builtin","type","class",")","All","Var","must","have","a","(","possibly","symbolic",")","type",",","usually","derived","from","type","inference","of","upstream","ops","or","from","default","values","in","_Input",".","sym_val","[","_sym_val","]",":","(","builtin","type","instance",")","Possibly","symbolic","value",".","val","[","_sym_val","]",":","(","np.ndarray","or","python","primitive","scalar",")","Numpy","(","scalar","\/","tensor",")","value",".","`","val","`","is","not","None","iff","`","sym_val","`","is","not","None","and","does","not","contain","symbols",".","Read-only",".","op","[","_op","]",":","(","Operation",")","The","Operation","this","Var","is","derived","from",".","May","not","be","None","except","for","InternalVar",".","Read-only",".","op_output_idx",":","(","int",")","Idx","of","the","output","from","Operation","corresponding","to","_Input",".","May","be","None",".","child_ops","[","_child_ops","]",":","list","[","Operation","]","Ops","that","take","this","Var","as","an","input",".","nonreplaceable_vars_upstream",":","set","[","Var","]","Set","that","consists","of","nonreplaceable","vars","upstream"]
code: def remove_child_op(self, target_op, no_check=False):
      if target_op not in self._child_ops:
          if no_check:
              return  # no-op
          msg = "Op {} does not takes Var {} as input"
          raise ValueError(msg.format(target_op.name, self.name))
      self._child_ops.remove(target_op)
  
imports: from typing import Optional, Union
  from coremltools.converters.mil.mil import types
  from coremltools.converters.mil.mil.types import builtin_to_string
  from coremltools.converters.mil.mil.types.symbolic import any_symbolic
label_desc: Use image node_id 20 for calling the Var obj's underlying member method code with example usage: obj.remove_child_op(target_op, no_check) without return types