docstr: Merge right and left operands ranges.
  
  TODO : We could exclude some operand with this range information...
  
  >>> import gast as ast
  >>> from pythran import passmanager, backend
  >>> node = ast.parse('''
  ... def foo():
  ...     a = 2
  ...     c = 3
  ...     d = a or c''')
  >>> pm = passmanager.PassManager("test")
  >>> res = pm.gather(RangeValues, node)
  >>> res['d']
  Interval(low=2, high=3)
docstr_tok: ["Merge","right","and","left","operands","ranges",".","TODO",":","We","could","exclude","some","operand","with","this","range","information","...",">",">",">","import","gast","as","ast",">",">",">","from","pythran","import","passmanager",",","backend",">",">",">","node","=","ast.parse","(","``","'","...","def","foo","(",")",":","...","a","=","2","...","c","=","3","...","d","=","a","or","c","''","'",")",">",">",">","pm","=","passmanager.PassManager","(","``","test","''",")",">",">",">","res","=","pm.gather","(","RangeValues",",","node",")",">",">",">","res","[","'d","'","]","Interval","(","low=2",",","high=3",")"]
code: def visit_BoolOp(self, node):
      """Merge right and left operands ranges.
  
      TODO : We could exclude some operand with this range information...
  
      >>> import gast as ast
      >>> from pythran import passmanager, backend
      >>> node = ast.parse('''
      ... def foo():
      ...     a = 2
      ...     c = 3
      ...     d = a or c''')
      >>> pm = passmanager.PassManager("test")
      >>> res = pm.gather(RangeValues, node)
      >>> res['d']
      Interval(low=2, high=3)
      """
      res = list(
          zip(*[self.visit(elt).bounds() for elt in node.values])
      )
      return self.add(node, Interval(min(res[0]), max(res[1])))
  
imports: import gast
  from collections import defaultdict
  from functools import reduce
  from pythran.analyses import Aliases, CFG
  from pythran.intrinsic import Intrinsic
  from pythran.passmanager import ModuleAnalysis
  from pythran.interval import Interval, IntervalTuple, UNKNOWN_RANGE
  from pythran.tables import MODULES, attributes
label_desc: Use image node_id 5 for calling the RangeValuesBase obj's underlying member method code with example usage: obj.visit_BoolOp(node) and returns: self