docstr: Combine operands ranges for given operator.
  
  >>> import gast as ast
  >>> from pythran import passmanager, backend
  >>> node = ast.parse('''
  ... def foo():
  ...     a = 2
  ...     c = 3
  ...     d = a - c''')
  >>> pm = passmanager.PassManager("test")
  >>> res = pm.gather(RangeValues, node)
  >>> res['d']
  Interval(low=-1, high=-1)
docstr_tok: ["Combine","operands","ranges","for","given","operator",".",">",">",">","import","gast","as","ast",">",">",">","from","pythran","import","passmanager",",","backend",">",">",">","node","=","ast.parse","(","``","'","...","def","foo","(",")",":","...","a","=","2","...","c","=","3","...","d","=","a","-","c","''","'",")",">",">",">","pm","=","passmanager.PassManager","(","``","test","''",")",">",">",">","res","=","pm.gather","(","RangeValues",",","node",")",">",">",">","res","[","'d","'","]","Interval","(","low=-1",",","high=-1",")"]
code: def visit_BinOp(self, node):
      """Combine operands ranges for given operator.
  
      >>> import gast as ast
      >>> from pythran import passmanager, backend
      >>> node = ast.parse('''
      ... def foo():
      ...     a = 2
      ...     c = 3
      ...     d = a - c''')
      >>> pm = passmanager.PassManager("test")
      >>> res = pm.gather(RangeValues, node)
      >>> res['d']
      Interval(low=-1, high=-1)
      """
      res = combine(
          node.op, self.visit(node.left), self.visit(node.right)
      )
      return self.add(node, res)
  
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 6 for calling the RangeValuesBase obj's underlying member method code with example usage: obj.visit_BinOp(node) and returns: self