• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
17from __future__ import absolute_import
18from __future__ import division
19from __future__ import print_function
20
21from tensorflow.python.framework import ops
22from tensorflow.python.ops import array_ops
23
24
25def alias_tensors(*args):
26  """Wraps 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
52
53def capitalize_initial(s):
54  """Capitalizes the initial of a string only."""
55  if s:
56    return s[0].upper() + s[1:]
57  return s
58