class_docstr: Simplify expressions based on range analysis
  
  >>> import gast as ast
  >>> from pythran import passmanager, backend
  
  >>> node = ast.parse("def any():\n for x in builtins.range(10): y=x%8")
  >>> pm = passmanager.PassManager("test")
  >>> _, node = pm.apply(RangeBasedSimplify, node)
  >>> print(pm.dump(backend.Python, node))
  def any():
      for x in builtins.range(10):
          y = (x if (x < 8) else (x - 8))
  
  >>> node = ast.parse("def any(): x = 1 or 2; return 3 == x")
  >>> pm = passmanager.PassManager("test")
  >>> _, node = pm.apply(RangeBasedSimplify, node)
  >>> print(pm.dump(backend.Python, node))
  def any():
      x = (1 or 2)
      return 0
  
  >>> node = ast.parse("def a(i): x = 1,1,2; return x[2], x[0 if i else 1]")
  >>> pm = passmanager.PassManager("test")
  >>> _, node = pm.apply(RangeBasedSimplify, node)
  >>> print(pm.dump(backend.Python, node))
  def a(i):
      x = (1, 1, 2)
      return (2, 1)
class_docstr_tok: ["Simplify","expressions","based","on","range","analysis",">",">",">","import","gast","as","ast",">",">",">","from","pythran","import","passmanager",",","backend",">",">",">","node","=","ast.parse","(","``","def","any","(",")",":","\\n","for","x","in","builtins.range","(","10",")",":","y=x","%","8","''",")",">",">",">","pm","=","passmanager.PassManager","(","``","test","''",")",">",">",">","_",",","node","=","pm.apply","(","RangeBasedSimplify",",","node",")",">",">",">","print","(","pm.dump","(","backend.Python",",","node",")",")","def","any","(",")",":","for","x","in","builtins.range","(","10",")",":","y","=","(","x","if","(","x","<","8",")","else","(","x","-","8",")",")",">",">",">","node","=","ast.parse","(","``","def","any","(",")",":","x","=","1","or","2",";","return","3","==","x","''",")",">",">",">","pm","=","passmanager.PassManager","(","``","test","''",")",">",">",">","_",",","node","=","pm.apply","(","RangeBasedSimplify",",","node",")",">",">",">","print","(","pm.dump","(","backend.Python",",","node",")",")","def","any","(",")",":","x","=","(","1","or","2",")","return","0",">",">",">","node","=","ast.parse","(","``","def","a","(","i",")",":","x","=","1,1,2",";","return","x","[","2","]",",","x","[","0","if","i","else","1","]","''",")",">",">",">","pm","=","passmanager.PassManager","(","``","test","''",")",">",">",">","_",",","node","=","pm.apply","(","RangeBasedSimplify",",","node",")",">",">",">","print","(","pm.dump","(","backend.Python",",","node",")",")","def","a","(","i",")",":","x","=","(","1",",","1",",","2",")","return","(","2",",","1",")"]
code: def visit_OMPDirective(self, node):
      return node
  
file_path: catboost/contrib/python/pythran/pythran/optimizations/range_based_simplify.py
imports: from pythran.analyses import RangeValues
  from pythran.passmanager import Transformation
  import gast
  from math import isinf
  from copy import deepcopy
label_desc: Use image node_id 2 for calling the RangeBasedSimplify obj's underlying member method code with example usage: obj.visit_OMPDirective(node) and returns: node