aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar IMBurbank <bassmanburbank@gmail.com>2018-09-27 22:21:47 -0600
committerGravatar IMBurbank <bassmanburbank@gmail.com>2018-09-27 22:21:47 -0600
commitefe17306442aa91192df953ae537d3f9b824dae6 (patch)
treecd36fdea64c4927bb9e868abdda2f0e08d21e630
parent5bbcdb8a58efd97b0f73927218d5896da67f5203 (diff)
Updated python3 tf_inspect.getargspec calls to use getfullargspec and repackage the return values into the getargspec struct.
-rw-r--r--tensorflow/contrib/gan/python/losses/python/tuple_losses_impl.py2
-rw-r--r--tensorflow/contrib/labeled_tensor/python/ops/_typecheck.py2
-rw-r--r--tensorflow/contrib/layers/python/layers/rev_block_lib.py3
-rw-r--r--tensorflow/contrib/learn/python/learn/estimators/estimator.py4
-rw-r--r--tensorflow/contrib/learn/python/learn/estimators/head.py2
-rw-r--r--tensorflow/contrib/learn/python/learn/experiment_test.py2
-rw-r--r--tensorflow/contrib/learn/python/learn/export_strategy.py2
-rw-r--r--tensorflow/contrib/learn/python/learn/metric_spec.py2
-rw-r--r--tensorflow/contrib/learn/python/learn/monitors.py2
-rw-r--r--tensorflow/contrib/tpu/python/tpu/tpu_function.py2
-rw-r--r--tensorflow/python/framework/errors_impl.py2
-rw-r--r--tensorflow/python/framework/function.py6
-rw-r--r--tensorflow/python/keras/backend_test.py2
-rw-r--r--tensorflow/python/keras/testing_utils.py2
-rw-r--r--tensorflow/python/kernel_tests/variable_scope_test.py4
-rw-r--r--tensorflow/python/ops/variable_scope.py4
-rw-r--r--tensorflow/python/util/tf_contextlib_test.py2
-rw-r--r--tensorflow/python/util/tf_inspect.py89
-rw-r--r--tensorflow/tools/api/lib/python_object_to_proto_visitor.py4
19 files changed, 79 insertions, 59 deletions
diff --git a/tensorflow/contrib/gan/python/losses/python/tuple_losses_impl.py b/tensorflow/contrib/gan/python/losses/python/tuple_losses_impl.py
index 00a83e5e55..221c70c38b 100644
--- a/tensorflow/contrib/gan/python/losses/python/tuple_losses_impl.py
+++ b/tensorflow/contrib/gan/python/losses/python/tuple_losses_impl.py
@@ -101,7 +101,7 @@ def _args_to_gan_model(loss_fn):
"""
# Match arguments in `loss_fn` to elements of `namedtuple`.
# TODO(joelshor): Properly handle `varargs` and `keywords`.
- argspec = tf_inspect.getfullargspec(loss_fn)
+ argspec = tf_inspect.getargspec(loss_fn)
defaults = argspec.defaults or []
required_args = set(argspec.args[:-len(defaults)])
diff --git a/tensorflow/contrib/labeled_tensor/python/ops/_typecheck.py b/tensorflow/contrib/labeled_tensor/python/ops/_typecheck.py
index 0e23039847..80fa17ec1f 100644
--- a/tensorflow/contrib/labeled_tensor/python/ops/_typecheck.py
+++ b/tensorflow/contrib/labeled_tensor/python/ops/_typecheck.py
@@ -230,7 +230,7 @@ def accepts(*types):
def check_accepts(f):
"""Check the types."""
- spec = tf_inspect.getfullargspec(f)
+ spec = tf_inspect.getargspec(f)
num_function_arguments = len(spec.args)
if len(types) != num_function_arguments:
diff --git a/tensorflow/contrib/layers/python/layers/rev_block_lib.py b/tensorflow/contrib/layers/python/layers/rev_block_lib.py
index 55979cc391..06da32072f 100644
--- a/tensorflow/contrib/layers/python/layers/rev_block_lib.py
+++ b/tensorflow/contrib/layers/python/layers/rev_block_lib.py
@@ -576,8 +576,7 @@ def _recomputing_grad_fn(compute_fn,
def _recompute_grad(fn, args, use_data_dep=_USE_DEFAULT, tupleize_grads=False):
"""See recompute_grad."""
- has_is_recompute_kwarg = (
- "is_recomputing" in tf_inspect.getfullargspec(fn).args)
+ has_is_recompute_kwarg = "is_recomputing" in tf_inspect.getargspec(fn).args
for arg in args:
if not isinstance(arg, framework_ops.Tensor):
raise ValueError("All inputs to function must be Tensors")
diff --git a/tensorflow/contrib/learn/python/learn/estimators/estimator.py b/tensorflow/contrib/learn/python/learn/estimators/estimator.py
index b88923bca2..c1de42782e 100644
--- a/tensorflow/contrib/learn/python/learn/estimators/estimator.py
+++ b/tensorflow/contrib/learn/python/learn/estimators/estimator.py
@@ -199,11 +199,11 @@ def _model_fn_args(fn):
if hasattr(fn, 'func') and hasattr(fn, 'keywords') and hasattr(fn, 'args'):
# Handle functools.partial and similar objects.
return tuple([
- arg for arg in tf_inspect.getfullargspec(fn.func).args[len(fn.args):]
+ arg for arg in tf_inspect.getargspec(fn.func).args[len(fn.args):]
if arg not in set(fn.keywords.keys())
])
# Handle function.
- return tuple(tf_inspect.getfullargspec(fn).args)
+ return tuple(tf_inspect.getargspec(fn).args)
def _get_replica_device_setter(config):
diff --git a/tensorflow/contrib/learn/python/learn/estimators/head.py b/tensorflow/contrib/learn/python/learn/estimators/head.py
index 63dd08316b..c6f79e00d5 100644
--- a/tensorflow/contrib/learn/python/learn/estimators/head.py
+++ b/tensorflow/contrib/learn/python/learn/estimators/head.py
@@ -1861,7 +1861,7 @@ def _get_arguments(func):
_, func = tf_decorator.unwrap(func)
if hasattr(func, "__code__"):
# Regular function.
- return tf_inspect.getfullargspec(func)
+ return tf_inspect.getargspec(func)
elif hasattr(func, "func"):
# Partial function.
return _get_arguments(func.func)
diff --git a/tensorflow/contrib/learn/python/learn/experiment_test.py b/tensorflow/contrib/learn/python/learn/experiment_test.py
index 6926696fb6..fb16c94c29 100644
--- a/tensorflow/contrib/learn/python/learn/experiment_test.py
+++ b/tensorflow/contrib/learn/python/learn/experiment_test.py
@@ -126,7 +126,7 @@ class TestBaseEstimator(object):
def _check_method_supports_args(method, kwargs):
"""Checks that the given method supports the given args."""
- supported_args = tuple(tf_inspect.getfullargspec(method).args)
+ supported_args = tuple(tf_inspect.getargspec(method).args)
for kwarg in kwargs:
if kwarg not in supported_args:
raise ValueError(
diff --git a/tensorflow/contrib/learn/python/learn/export_strategy.py b/tensorflow/contrib/learn/python/learn/export_strategy.py
index 0d6e0cdc18..075cab536e 100644
--- a/tensorflow/contrib/learn/python/learn/export_strategy.py
+++ b/tensorflow/contrib/learn/python/learn/export_strategy.py
@@ -96,7 +96,7 @@ class ExportStrategy(
"""
# don't break existing export_fns that don't accept checkpoint_path and
# eval_result
- export_fn_args = tf_inspect.getfullargspec(self.export_fn).args
+ export_fn_args = tf_inspect.getargspec(self.export_fn).args
kwargs = {}
if 'checkpoint_path' in export_fn_args:
kwargs['checkpoint_path'] = checkpoint_path
diff --git a/tensorflow/contrib/learn/python/learn/metric_spec.py b/tensorflow/contrib/learn/python/learn/metric_spec.py
index 604d6d46b4..97220365d5 100644
--- a/tensorflow/contrib/learn/python/learn/metric_spec.py
+++ b/tensorflow/contrib/learn/python/learn/metric_spec.py
@@ -51,7 +51,7 @@ def _args(fn):
return tuple(
[arg for arg in _args(fn.func) if arg not in set(fn.keywords.keys())])
# Handle function.
- return tuple(tf_inspect.getfullargspec(fn).args)
+ return tuple(tf_inspect.getargspec(fn).args)
_CANONICAL_LABELS_ARG = 'labels'
diff --git a/tensorflow/contrib/learn/python/learn/monitors.py b/tensorflow/contrib/learn/python/learn/monitors.py
index 5f61e0264f..3d691d4340 100644
--- a/tensorflow/contrib/learn/python/learn/monitors.py
+++ b/tensorflow/contrib/learn/python/learn/monitors.py
@@ -1303,7 +1303,7 @@ class RunHookAdapterForMonitors(session_run_hook.SessionRunHook):
def end(self, session):
self._last_step = None
for m in self._monitors:
- if "session" in tf_inspect.getfullargspec(m.end).args:
+ if "session" in tf_inspect.getargspec(m.end).args:
m.end(session=session)
else:
m.end()
diff --git a/tensorflow/contrib/tpu/python/tpu/tpu_function.py b/tensorflow/contrib/tpu/python/tpu/tpu_function.py
index 9c4bd1c4d1..0c7a38dbbb 100644
--- a/tensorflow/contrib/tpu/python/tpu/tpu_function.py
+++ b/tensorflow/contrib/tpu/python/tpu/tpu_function.py
@@ -80,7 +80,7 @@ def check_function_argument_count(func, input_arity, infeed_queue):
number_of_arguments_needed = input_arity
if infeed_queue is not None:
number_of_arguments_needed += infeed_queue.number_of_tuple_elements
- arg_spec = tf_inspect.getfullargspec(func)
+ arg_spec = tf_inspect.getargspec(func)
number_of_args = len(arg_spec.args)
if arg_spec.defaults is None:
number_of_defaults = 0
diff --git a/tensorflow/python/framework/errors_impl.py b/tensorflow/python/framework/errors_impl.py
index c373e75a74..5af71f2cfb 100644
--- a/tensorflow/python/framework/errors_impl.py
+++ b/tensorflow/python/framework/errors_impl.py
@@ -55,7 +55,7 @@ class OpError(Exception):
def __reduce__(self):
# Allow the subclasses to accept less arguments in their __init__.
- init_argspec = tf_inspect.getfullargspec(self.__class__.__init__)
+ init_argspec = tf_inspect.getargspec(self.__class__.__init__)
args = tuple(getattr(self, arg) for arg in init_argspec.args[1:])
return self.__class__, args
diff --git a/tensorflow/python/framework/function.py b/tensorflow/python/framework/function.py
index 3db6f683c9..225208944e 100644
--- a/tensorflow/python/framework/function.py
+++ b/tensorflow/python/framework/function.py
@@ -132,9 +132,9 @@ class Defun(object):
raise ValueError("func %s must be callable" % func)
# Func should not use kwargs and defaults.
- argspec = tf_inspect.getfullargspec(func)
- if argspec.varkw or argspec.defaults:
- raise ValueError("Functions with argument defaults or varkw "
+ argspec = tf_inspect.getargspec(func)
+ if argspec.keywords or argspec.defaults:
+ raise ValueError("Functions with argument defaults or keywords "
"arguments are not supported.")
# Computes how many arguments 'func' has.
diff --git a/tensorflow/python/keras/backend_test.py b/tensorflow/python/keras/backend_test.py
index 31191d0d35..ab71589940 100644
--- a/tensorflow/python/keras/backend_test.py
+++ b/tensorflow/python/keras/backend_test.py
@@ -452,7 +452,7 @@ class BackendLinearAlgebraTest(test.TestCase):
compare_single_input_op_to_numpy(keras_op, np_op, input_shape=(4, 7, 5),
keras_kwargs={'axis': -1},
np_kwargs={'axis': -1})
- if 'keepdims' in tf_inspect.getfullargspec(keras_op).args:
+ if 'keepdims' in tf_inspect.getargspec(keras_op).args:
compare_single_input_op_to_numpy(keras_op, np_op,
input_shape=(4, 7, 5),
keras_kwargs={'axis': 1,
diff --git a/tensorflow/python/keras/testing_utils.py b/tensorflow/python/keras/testing_utils.py
index 1afaba5653..501b50ba5f 100644
--- a/tensorflow/python/keras/testing_utils.py
+++ b/tensorflow/python/keras/testing_utils.py
@@ -102,7 +102,7 @@ def layer_test(layer_cls, kwargs=None, input_shape=None, input_dtype=None,
layer.set_weights(weights)
# test and instantiation from weights
- if 'weights' in tf_inspect.getfullargspec(layer_cls.__init__):
+ if 'weights' in tf_inspect.getargspec(layer_cls.__init__):
kwargs['weights'] = weights
layer = layer_cls(**kwargs)
diff --git a/tensorflow/python/kernel_tests/variable_scope_test.py b/tensorflow/python/kernel_tests/variable_scope_test.py
index 1d0b72b17a..401e1ae102 100644
--- a/tensorflow/python/kernel_tests/variable_scope_test.py
+++ b/tensorflow/python/kernel_tests/variable_scope_test.py
@@ -998,8 +998,8 @@ class VariableScopeTest(test.TestCase):
def testSignatureGetVarVsGetLocalVar(self):
"""get_{local,}variable() must take the same list of args."""
- arg_names = tf_inspect.getfullargspec(variable_scope.get_variable)[0]
- local_arg_names = tf_inspect.getfullargspec(
+ arg_names = tf_inspect.getargspec(variable_scope.get_variable)[0]
+ local_arg_names = tf_inspect.getargspec(
variable_scope.get_local_variable)[0]
self.assertEqual(arg_names, local_arg_names)
diff --git a/tensorflow/python/ops/variable_scope.py b/tensorflow/python/ops/variable_scope.py
index 3cc1eb916d..a43676cd70 100644
--- a/tensorflow/python/ops/variable_scope.py
+++ b/tensorflow/python/ops/variable_scope.py
@@ -892,14 +892,14 @@ class _VariableStore(object):
if shape and shape.is_fully_defined():
init_val = lambda: initializer( # pylint: disable=g-long-lambda
shape.as_list(), dtype=dtype, partition_info=partition_info)
- elif not tf_inspect.getfullargspec(initializer).args:
+ elif not tf_inspect.getargspec(initializer).args:
init_val = initializer
else:
raise ValueError("You can only pass an initializer function that "
"expects no arguments to its callable when the "
"shape is not fully defined. The given initializer "
"function expects the following args %s" %
- tf_inspect.getfullargspec(initializer).args)
+ tf_inspect.getargspec(initializer).args)
variable_dtype = dtype.base_dtype
# Create the variable.
diff --git a/tensorflow/python/util/tf_contextlib_test.py b/tensorflow/python/util/tf_contextlib_test.py
index 1e921b5ea3..4a5bf388a6 100644
--- a/tensorflow/python/util/tf_contextlib_test.py
+++ b/tensorflow/python/util/tf_contextlib_test.py
@@ -83,7 +83,7 @@ class TfContextlibTest(test.TestCase):
self.assertFalse(isinstance(target, tf_decorator.TFDecorator))
def testGetArgSpecReturnsWrappedArgSpec(self):
- argspec = tf_inspect.getfullargspec(test_params_and_defaults)
+ argspec = tf_inspect.getargspec(test_params_and_defaults)
self.assertEqual(['a', 'b', 'c', 'd'], argspec.args)
self.assertEqual((2, True, 'hello'), argspec.defaults)
diff --git a/tensorflow/python/util/tf_inspect.py b/tensorflow/python/util/tf_inspect.py
index 234850ac3f..3cd6c515b9 100644
--- a/tensorflow/python/util/tf_inspect.py
+++ b/tensorflow/python/util/tf_inspect.py
@@ -36,6 +36,53 @@ else:
'annotations'
])
+if hasattr(_inspect, 'getfullargspec'):
+ _getfullargspec = _inspect.getfullargspec # pylint: disable=invalid-name
+
+ def _getargspec(target):
+ """A python3 version of getargspec.
+
+ Calls `getfullargspec` and assigns args, varargs,
+ varkw, and defaults to a python 2/3 compatible `ArgSpec`.
+
+ The parameter name 'varkw' is changed to 'keywords' to fit the
+ `ArgSpec` struct.
+
+ Args:
+ target: the target object to inspect.
+ Returns:
+ An ArgSpec with args, varargs, keywords, and defaults parameters
+ from FullArgSpec.
+ """
+ fullargspecs = getfullargspec(target)
+ argspecs = ArgSpec(
+ args=fullargspecs.args,
+ varargs=fullargspecs.varargs,
+ keywords=fullargspecs.varkw,
+ defaults=fullargspecs.defaults)
+ return argspecs
+else:
+ _getargspec = _inspect.getargspec
+
+ def _getfullargspec(target):
+ """A python2 version of getfullargspec.
+
+ Args:
+ target: the target object to inspect.
+ Returns:
+ A FullArgSpec with empty kwonlyargs, kwonlydefaults and annotations.
+ """
+ argspecs = getargspec(target)
+ fullargspecs = FullArgSpec(
+ args=argspecs.args,
+ varargs=argspecs.varargs,
+ varkw=argspecs.keywords,
+ defaults=argspecs.defaults,
+ kwonlyargs=[],
+ kwonlydefaults=None,
+ annotations={})
+ return fullargspecs
+
def currentframe():
"""TFDecorator-aware replacement for inspect.currentframe."""
@@ -45,10 +92,8 @@ def currentframe():
def getargspec(obj):
"""TFDecorator-aware replacement for `inspect.getargspec`.
- This should not be called from other modules. It is deprecated in python3.
-
- Use `getfullargspec`. It is a TFDecorator-aware replacement for
- `inspect.getfullargspec` compatible with both python2 and python3.
+ Note: `getfullargspec` is recommended as the python 2/3 compatible
+ replacement for this function.
Args:
obj: A function, partial function, or callable object, possibly
@@ -56,8 +101,8 @@ def getargspec(obj):
Returns:
The `ArgSpec` that describes the signature of the outermost decorator that
- changes the callable's signature. If the callable is not decorated,
- `inspect.getargspec()` will be called directly on the object.
+ changes the callable's signature, or the `ArgSpec` that describes
+ the object if not decorated.
Raises:
ValueError: When callable's signature can not be expressed with
@@ -77,24 +122,24 @@ def getargspec(obj):
try:
# Python3 will handle most callables here (not partial).
- return _inspect.getargspec(target)
+ return _getargspec(target)
except TypeError:
pass
if isinstance(target, type):
try:
- return _inspect.getargspec(target.__init__)
+ return _getargspec(target.__init__)
except TypeError:
pass
try:
- return _inspect.getargspec(target.__new__)
+ return _getargspec(target.__new__)
except TypeError:
pass
# The `type(target)` ensures that if a class is received we don't return
# the signature of it's __call__ method.
- return _inspect.getargspec(type(target).__call__)
+ return _getargspec(type(target).__call__)
def _get_argspec_for_partial(obj):
@@ -177,30 +222,6 @@ def _get_argspec_for_partial(obj):
return ArgSpec(args, varargs, keywords, tuple(all_defaults[first_default:]))
-if hasattr(_inspect, 'getfullargspec'):
- _getfullargspec = _inspect.getfullargspec
-else:
-
- def _getfullargspec(target):
- """A python2 version of getfullargspec.
-
- Args:
- target: the target object to inspect.
- Returns:
- A FullArgSpec with empty kwonlyargs, kwonlydefaults and annotations.
- """
- argspecs = getargspec(target)
- fullargspecs = FullArgSpec(
- args=argspecs.args,
- varargs=argspecs.varargs,
- varkw=argspecs.keywords,
- defaults=argspecs.defaults,
- kwonlyargs=[],
- kwonlydefaults=None,
- annotations={})
- return fullargspecs
-
-
def getfullargspec(obj):
"""TFDecorator-aware replacement for `inspect.getfullargspec`.
diff --git a/tensorflow/tools/api/lib/python_object_to_proto_visitor.py b/tensorflow/tools/api/lib/python_object_to_proto_visitor.py
index a8e69fda4f..3a48cf683c 100644
--- a/tensorflow/tools/api/lib/python_object_to_proto_visitor.py
+++ b/tensorflow/tools/api/lib/python_object_to_proto_visitor.py
@@ -47,9 +47,9 @@ def _SanitizedArgSpec(obj):
string, a string representation of the argspec.
"""
output_string = ''
- unsanitized_arg_spec = tf_inspect.getfullargspec(obj)
+ unsanitized_arg_spec = tf_inspect.getargspec(obj)
- for clean_attr in ('args', 'varargs', 'varkw'):
+ for clean_attr in ('args', 'varargs', 'keywords'):
output_string += '%s=%s, ' % (clean_attr,
getattr(unsanitized_arg_spec, clean_attr))