Home | History | Annotate | Download | only in utils
      1 # Copyright 2017 The TensorFlow Authors. All Rights Reserved.
      2 #
      3 # Licensed under the Apache License, Version 2.0 (the "License");
      4 # you may not use this file except in compliance with the License.
      5 # You may obtain a copy of the License at
      6 #
      7 #     http://www.apache.org/licenses/LICENSE-2.0
      8 #
      9 # Unless required by applicable law or agreed to in writing, software
     10 # distributed under the License is distributed on an "AS IS" BASIS,
     11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 # See the License for the specific language governing permissions and
     13 # limitations under the License.
     14 # ==============================================================================
     15 """Miscellaneous utilities that don't fit anywhere else."""
     16 
     17 from __future__ import absolute_import
     18 from __future__ import division
     19 from __future__ import print_function
     20 
     21 from tensorflow.python.framework import ops
     22 from tensorflow.python.ops import array_ops
     23 
     24 
     25 def alias_tensors(*args):
     26   """Wrap any Tensor arguments with an identity op.
     27 
     28   Any other argument, including Variables, is returned unchanged.
     29 
     30   Args:
     31     *args: Any arguments. Must contain at least one element.
     32 
     33   Returns:
     34     Same as *args, with Tensor instances replaced as described.
     35 
     36   Raises:
     37     ValueError: If args doesn't meet the requirements.
     38   """
     39 
     40   def alias_if_tensor(a):
     41     return array_ops.identity(a) if isinstance(a, ops.Tensor) else a
     42 
     43   # TODO(mdan): Recurse into containers?
     44   # TODO(mdan): Anything we can do about variables? Fake a scope reuse?
     45   if len(args) > 1:
     46     return (alias_if_tensor(a) for a in args)
     47   elif len(args) == 1:
     48     return alias_if_tensor(args[0])
     49 
     50   raise ValueError('at least one argument required')
     51