class_docstr: Infer symbolic type for all AST node. 
class_docstr_tok: ["Infer","symbolic","type","for","all","AST","node","."]
docstr: Merge BoolOp operand type.
  
  BoolOp are "and" and "or" and may return any of these results so all
  operands should have the combinable type.
docstr_tok: ["Merge","BoolOp","operand","type",".","BoolOp","are","``","and","''","and","``","or","''","and","may","return","any","of","these","results","so","all","operands","should","have","the","combinable","type","."]
code: def visit_BoolOp(self, node):
      """
      Merge BoolOp operand type.
  
      BoolOp are "and" and "or" and may return any of these results so all
      operands should have the combinable type.
      """
      # Visit subnodes
      self.generic_visit(node)
      # Merge all operands types.
      for value in node.values:
          self.update_type(node, None, self.result[value])
  
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 18 for calling the Types obj's underlying member method code with example usage: obj.visit_BoolOp(node) without return types