Add Condition number method to LinearOperator.

PiperOrigin-RevId: 282443598
Change-Id: If96b0be1cb74bbf157dbb843349eec907a022798
This commit is contained in:
Srinivas Vasudevan 2019-11-25 15:16:30 -08:00 committed by TensorFlower Gardener
parent 61a358170d
commit 4b4bf4223d
50 changed files with 281 additions and 16 deletions
tensorflow
python
tools/api/golden
v1
v2

View File

@ -482,6 +482,10 @@ class LinearOperatorCirculant2DTestHermitianSpectrum(
zero imaginary part.
"""
@staticmethod
def skip_these_tests():
return ["cond"]
def operator_and_matrix(
self, shape_info, dtype, use_placeholder,
ensure_self_adjoint_and_pd=False):

View File

@ -20,7 +20,6 @@ from __future__ import print_function
import numpy as np
from tensorflow.python.framework import dtypes
from tensorflow.python.framework import ops
from tensorflow.python.framework import test_util
from tensorflow.python.ops import array_ops
from tensorflow.python.ops import math_ops
@ -151,15 +150,12 @@ class NonSquareLinearOperatorCompositionTest(
self._rtol[dtypes.float32] = 1e-4
self._rtol[dtypes.complex64] = 1e-4
def operator_and_matrix(self, build_info, dtype, use_placeholder):
sess = ops.get_default_session()
def operator_and_matrix(
self, build_info, dtype, use_placeholder,
ensure_self_adjoint_and_pd=False):
del ensure_self_adjoint_and_pd
shape = list(build_info.shape)
# Test only the case of 2 matrices.
# The Square test uses either 1 or 2, so we have tested the case of 1 matrix
# sufficiently.
num_operators = 2
# Create 2 matrices/operators, A1, A2, which becomes A = A1 A2.
# Use inner dimension of 2.
k = 2

View File

@ -222,7 +222,10 @@ class NonSquareLinearOperatorFullMatrixTest(
linear_operator_test_util.NonSquareLinearOperatorDerivedClassTest):
"""Most tests done in the base class LinearOperatorDerivedClassTest."""
def operator_and_matrix(self, build_info, dtype, use_placeholder):
def operator_and_matrix(
self, build_info, dtype, use_placeholder,
ensure_self_adjoint_and_pd=False):
del ensure_self_adjoint_and_pd
shape = list(build_info.shape)
matrix = linear_operator_test_util.random_normal(shape, dtype=dtype)

View File

@ -39,7 +39,13 @@ class LinearOperatorZerosTest(
@staticmethod
def skip_these_tests():
return [
"cholesky", "log_abs_det", "inverse", "solve", "solve_with_broadcast"]
"cholesky",
"cond",
"inverse",
"log_abs_det",
"solve",
"solve_with_broadcast"
]
@staticmethod
def operator_shapes_infos():
@ -195,8 +201,11 @@ class LinearOperatorZerosTest(
class LinearOperatorZerosNotSquareTest(
linear_operator_test_util.NonSquareLinearOperatorDerivedClassTest):
def operator_and_matrix(self, build_info, dtype, use_placeholder):
def operator_and_matrix(
self, build_info, dtype, use_placeholder,
ensure_self_adjoint_and_pd=False):
del use_placeholder
del ensure_self_adjoint_and_pd
shape = list(build_info.shape)
batch_shape = shape[:-2]

View File

@ -1073,6 +1073,31 @@ class LinearOperator(module.Module):
with self._name_scope(name):
return self._eigvals()
def _cond(self):
if not self.is_self_adjoint:
# In general the condition number is the ratio of the
# absolute value of the largest and smallest singular values.
vals = linalg_ops.svd(self.to_dense(), compute_uv=False)
else:
# For self-adjoint matrices, and in general normal matrices,
# we can use eigenvalues.
vals = math_ops.abs(self._eigvals())
return (math_ops.reduce_max(vals, axis=-1) /
math_ops.reduce_min(vals, axis=-1))
def cond(self, name="cond"):
"""Returns the condition number of this linear operator.
Args:
name: A name for this `Op`.
Returns:
Shape `[B1,...,Bb]` `Tensor` of same `dtype` as `self`.
"""
with self._name_scope(name):
return self._cond()
def _can_use_cholesky(self):
return self.is_self_adjoint and self.is_positive_definite

View File

@ -219,3 +219,6 @@ class LinearOperatorAdjoint(linear_operator.LinearOperator):
if not self.operator.is_self_adjoint:
eigvals = math_ops.conj(eigvals)
return eigvals
def _cond(self):
return self.operator.cond()

View File

@ -183,6 +183,10 @@ class LinearOperatorDiag(linear_operator.LinearOperator):
k = d_shape[-1]
return array_ops.concat((d_shape, [k]), 0)
@property
def diag(self):
return self._diag
def _assert_non_singular(self):
return linear_operator_util.assert_no_entries_with_modulus_zero(
self._diag,
@ -249,6 +253,7 @@ class LinearOperatorDiag(linear_operator.LinearOperator):
def _eigvals(self):
return ops.convert_to_tensor(self.diag)
@property
def diag(self):
return self._diag
def _cond(self):
abs_diag = math_ops.abs(self.diag)
return (math_ops.reduce_max(abs_diag, axis=-1) /
math_ops.reduce_min(abs_diag, axis=-1))

View File

@ -253,6 +253,10 @@ class LinearOperatorHouseholder(linear_operator.LinearOperator):
[-array_ops.ones(shape=neg_shape, dtype=self.dtype), eigvals], axis=-1)
return eigvals
def _cond(self):
# Householder matrices are rotations which have condition number 1.
return array_ops.ones(self.batch_shape_tensor(), dtype=self.dtype)
@property
def reflection_axis(self):
return self._reflection_axis

View File

@ -402,6 +402,9 @@ class LinearOperatorIdentity(BaseLinearOperatorIdentity):
def _eigvals(self):
return self._ones_diag()
def _cond(self):
return array_ops.ones(self.batch_shape_tensor(), dtype=self.dtype)
def _check_num_rows_possibly_add_asserts(self):
"""Static check of init arg `num_rows`, possibly add asserts."""
# Possibly add asserts.
@ -730,6 +733,14 @@ class LinearOperatorScaledIdentity(BaseLinearOperatorIdentity):
def _eigvals(self):
return self._ones_diag() * self.multiplier[..., array_ops.newaxis]
def _cond(self):
# Condition number for a scalar time identity matrix is one, except when the
# scalar is zero.
return array_ops.where_v2(
math_ops.equal(self._multiplier, 0.),
math_ops.cast(np.nan, dtype=self.dtype),
math_ops.cast(1., dtype=self.dtype))
@property
def multiplier(self):
"""The [batch] scalar `Tensor`, `c` in `cI`."""

View File

@ -201,3 +201,6 @@ class LinearOperatorInversion(linear_operator.LinearOperator):
def _eigvals(self):
return 1. / self.operator.eigvals()
def _cond(self):
return self.operator.cond()

View File

@ -242,6 +242,10 @@ class LinearOperatorPermutation(linear_operator.LinearOperator):
math_ops.range(0, self._domain_dimension_tensor(perm)),
perm), self.dtype)
def _cond(self):
# Permutation matrices are rotations which have condition number 1.
return array_ops.ones(self.batch_shape_tensor(), dtype=self.dtype)
@property
def perm(self):
return self._perm

View File

@ -425,6 +425,10 @@ def _test_eigvalsh(use_placeholder, shapes_info, dtype):
# for comparison.
op_eigvals = sort_ops.sort(
math_ops.cast(operator.eigvals(), dtype=dtypes.float64), axis=-1)
if dtype.is_complex:
mat = math_ops.cast(mat, dtype=dtypes.complex128)
else:
mat = math_ops.cast(mat, dtype=dtypes.float64)
mat_eigvals = sort_ops.sort(
math_ops.cast(
linalg_ops.self_adjoint_eigvals(mat), dtype=dtypes.float64),
@ -434,12 +438,53 @@ def _test_eigvalsh(use_placeholder, shapes_info, dtype):
atol = self._atol[dtype] # pylint: disable=protected-access
rtol = self._rtol[dtype] # pylint: disable=protected-access
if dtype == dtypes.float32 or dtype == dtypes.complex64:
atol = 1e-4
rtol = 1e-4
atol = 2e-4
rtol = 2e-4
self.assertAllClose(op_eigvals_v, mat_eigvals_v, atol=atol, rtol=rtol)
return test_eigvalsh
def _test_cond(use_placeholder, shapes_info, dtype):
def test_cond(self):
with self.test_session(graph=ops.Graph()) as sess:
# svd does not work with zero dimensional matrices, so we'll
# skip
if 0 in shapes_info.shape[-2:]:
return
sess.graph.seed = random_seed.DEFAULT_GRAPH_SEED
# Ensure self-adjoint and PD so we get finite condition numbers.
operator, mat = self.operator_and_matrix(
shapes_info, dtype, use_placeholder=use_placeholder,
ensure_self_adjoint_and_pd=True)
# Eigenvalues are real, so we'll cast these to float64 and sort
# for comparison.
op_cond = operator.cond()
s = math_ops.abs(linalg_ops.svd(mat, compute_uv=False))
mat_cond = math_ops.reduce_max(s, axis=-1) / math_ops.reduce_min(
s, axis=-1)
op_cond_v, mat_cond_v = sess.run([op_cond, mat_cond])
atol_override = {
dtypes.float16: 1e-2,
dtypes.float32: 1e-3,
dtypes.float64: 1e-6,
dtypes.complex64: 1e-3,
dtypes.complex128: 1e-6,
}
rtol_override = {
dtypes.float16: 1e-2,
dtypes.float32: 1e-3,
dtypes.float64: 1e-4,
dtypes.complex64: 1e-3,
dtypes.complex128: 1e-6,
}
atol = atol_override[dtype]
rtol = rtol_override[dtype]
self.assertAllClose(op_cond_v, mat_cond_v, atol=atol, rtol=rtol)
return test_cond
def _test_solve_base(
self,
use_placeholder,
@ -577,6 +622,7 @@ def add_tests(test_cls):
test_name_dict = {
"add_to_tensor": _test_add_to_tensor,
"cholesky": _test_cholesky,
"cond": _test_cond,
"det": _test_det,
"diag_part": _test_diag_part,
"eigvalsh": _test_eigvalsh,

View File

@ -110,6 +110,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -110,6 +110,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -127,6 +127,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "convolution_kernel"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'convolution_kernel\'], "

View File

@ -127,6 +127,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "convolution_kernel"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'convolution_kernel\'], "

View File

@ -127,6 +127,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "convolution_kernel"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'convolution_kernel\'], "

View File

@ -110,6 +110,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -110,6 +110,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -106,6 +106,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -110,6 +110,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -107,6 +107,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -110,6 +110,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -110,6 +110,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -130,6 +130,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -106,6 +106,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -110,6 +110,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -111,6 +111,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -114,6 +114,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -106,6 +106,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -105,6 +105,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -110,6 +110,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -110,6 +110,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -127,6 +127,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "convolution_kernel"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'convolution_kernel\'], "

View File

@ -127,6 +127,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "convolution_kernel"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'convolution_kernel\'], "

View File

@ -127,6 +127,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "convolution_kernel"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'convolution_kernel\'], "

View File

@ -110,6 +110,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -110,6 +110,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -106,6 +106,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -110,6 +110,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -107,6 +107,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -110,6 +110,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -110,6 +110,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -130,6 +130,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -106,6 +106,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -110,6 +110,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -111,6 +111,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -114,6 +114,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -106,6 +106,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "

View File

@ -105,6 +105,10 @@ tf_class {
name: "cholesky"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cholesky\'], "
}
member_method {
name: "cond"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'cond\'], "
}
member_method {
name: "determinant"
argspec: "args=[\'self\', \'name\'], varargs=None, keywords=None, defaults=[\'det\'], "