class_docstr: Infer symbolic type for all AST node. 
class_docstr_tok: ["Infer","symbolic","type","for","all","AST","node","."]
docstr: Change `node` typing with combination of `node` and `othernode`.
docstr_tok: ["Change","`","node","`","typing","with","combination","of","`","node","`","and","`","othernode","`","."]
code: def combine(self, node, op, othernode):
      """
      Change `node` typing with combination of `node` and `othernode`.
      """
      if self.result[othernode] is self.builder.UnknownType:
          if node not in self.result:
              self.result[node] = self.builder.UnknownType
          return
  
      if op is None:
          op = lambda x: x
  
      node_aliases = ordered_set([node])
      node_aliases.extend(self.strict_aliases.get(node, ()))
      for a in node_aliases:
          self.combine_(a, op, othernode)
  
imports: from pythran.analyses import LazynessAnalysis, StrictAliases, YieldPoints
  from pythran.analyses import LocalNodeDeclarations, Immediates, RangeValues
  from pythran.analyses import Ancestors
  from pythran.config import cfg
  from pythran.cxxtypes import TypeBuilder, ordered_set
  from pythran.intrinsic import UserFunction, Class
  from pythran.passmanager import ModuleAnalysis
  from pythran.tables import operator_to_lambda, MODULES
  from pythran.types.conversion import pytype_to_ctype
  from pythran.types.reorder import Reorder
  from pythran.utils import attr_to_path, cxxid, isnum, isextslice
  from collections import defaultdict
  from functools import reduce
  import gast
  from itertools import islice
  from copy import deepcopy
label_desc: Use image node_id 8 for calling the Types obj's underlying member method code with example usage: obj.combine(node, op, othernode) without return types