def prepare(self,
             test_fn,
             namespace,
             namer=None,
             arg_types=None,
             owner_type=None,
             recursive=True,
             autograph_decorators=()):
   node, source = parser.parse_entity(test_fn)
   if namer is None:
     namer = FakeNamer()
   program_ctx = converter.ProgramContext(
       recursive=recursive,
       autograph_decorators=autograph_decorators,
       partial_types=None,
       autograph_module=None,
       uncompiled_modules=config.DEFAULT_UNCOMPILED_MODULES)
   entity_info = transformer.EntityInfo(
       source_code=source,
       source_file='<fragment>',
       namespace=namespace,
       arg_values=None,
       arg_types=arg_types,
       owner_type=owner_type)
   ctx = converter.EntityContext(namer, entity_info, program_ctx)
   node = converter.standard_analysis(node, ctx, is_initial=True)
   return node, ctx
Example #2
0
 def prepare(self,
             test_fn,
             namespace,
             namer=None,
             arg_types=None,
             owner_type=None,
             recursive=True,
             autograph_decorators=()):
     node, source = parser.parse_entity(test_fn)
     node = node.body[0]
     if namer is None:
         namer = FakeNamer()
     program_ctx = converter.ProgramContext(
         recursive=recursive,
         autograph_decorators=autograph_decorators,
         partial_types=None,
         autograph_module=None,
         uncompiled_modules=config.DEFAULT_UNCOMPILED_MODULES)
     entity_info = transformer.EntityInfo(source_code=source,
                                          source_file='<fragment>',
                                          namespace=namespace,
                                          arg_values=None,
                                          arg_types=arg_types,
                                          owner_type=owner_type)
     ctx = converter.EntityContext(namer, entity_info, program_ctx)
     node = converter.standard_analysis(node, ctx, is_initial=True)
     return node, ctx
Example #3
0
def node_to_graph(node, context, rewrite_errors=True):
  """Convert Python code to equivalent TF graph mode code.

  Args:
    node: AST, the code to convert.
    context: converter.EntityContext
    rewrite_errors: Boolean, whether or not to rewrite the error traceback.

  Returns:
    A tuple (node, deps):
        * node: A Python ast node, representing the converted code.
        * deps: A set of strings, the fully qualified names of entity
            dependencies that this node has.
  """
  # TODO(mdan): Insert list_comprehensions somewhere.

  node = converter.standard_analysis(node, context, is_initial=True)
  # Past this point, line numbers are no longer accurate so we ignore the
  # source.
  # TODO(mdan): Is it feasible to reconstruct intermediate source code?
  context.info.source_code = None

  node = converter.apply_(node, context, decorators)
  node = converter.apply_(node, context, directives)
  node = converter.apply_(node, context, break_statements)
  node = converter.apply_(node, context, asserts)
  # Note: sequencing continue canonicalization before for loop one avoids
  # dealing with the extra loop increment operation that the for
  # canonicalization creates.
  node = converter.apply_(node, context, continue_statements)
  context.info.namespace['len'] = len
  node = converter.apply_(node, context, return_statements)
  node = converter.apply_(node, context, lists)
  node = converter.apply_(node, context, slices)
  node = converter.apply_(node, context, builtin_functions)
  node = converter.apply_(node, context, call_trees)
  node = converter.apply_(node, context, control_flow)
  node = converter.apply_(node, context, conditional_expressions)
  node = converter.apply_(node, context, logical_expressions)
  node = converter.apply_(node, context, side_effect_guards)
  node = converter.apply_(node, context, name_scopes)
  if rewrite_errors:
    node = converter.apply_(node, context, error_handlers)
  return node
Example #4
0
def node_to_graph(node, context, rewrite_errors=True):
    """Convert Python code to equivalent TF graph mode code.

  Args:
    node: AST, the code to convert.
    context: converter.EntityContext
    rewrite_errors: Boolean, whether or not to rewrite the error traceback.

  Returns:
    A tuple (node, deps):
        * node: A Python ast node, representing the converted code.
        * deps: A set of strings, the fully qualified names of entity
            dependencies that this node has.
  """
    # TODO(mdan): Insert list_comprehensions somewhere.

    node = converter.standard_analysis(node, context, is_initial=True)
    # Past this point, line numbers are no longer accurate so we ignore the
    # source.
    # TODO(mdan): Is it feasible to reconstruct intermediate source code?
    context.info.source_code = None

    node = converter.apply_(node, context, decorators)
    node = converter.apply_(node, context, directives)
    node = converter.apply_(node, context, break_statements)
    node = converter.apply_(node, context, asserts)
    # Note: sequencing continue canonicalization before for loop one avoids
    # dealing with the extra loop increment operation that the for
    # canonicalization creates.
    node = converter.apply_(node, context, continue_statements)
    context.info.namespace['len'] = len
    node = converter.apply_(node, context, return_statements)
    node = converter.apply_(node, context, lists)
    node = converter.apply_(node, context, slices)
    node = converter.apply_(node, context, builtin_functions)
    node = converter.apply_(node, context, call_trees)
    node = converter.apply_(node, context, control_flow)
    node = converter.apply_(node, context, conditional_expressions)
    node = converter.apply_(node, context, logical_expressions)
    node = converter.apply_(node, context, side_effect_guards)
    node = converter.apply_(node, context, name_scopes)
    if rewrite_errors:
        node = converter.apply_(node, context, error_handlers)
    return node