Add Condition number method to LinearOperator.
PiperOrigin-RevId: 282443598 Change-Id: If96b0be1cb74bbf157dbb843349eec907a022798
This commit is contained in:
parent
61a358170d
commit
4b4bf4223d
tensorflow
python
kernel_tests/linalg
linear_operator_circulant_test.pylinear_operator_composition_test.pylinear_operator_full_matrix_test.pylinear_operator_zeros_test.py
ops/linalg
tools/api/golden
v1
tensorflow.linalg.-linear-operator-adjoint.pbtxttensorflow.linalg.-linear-operator-block-diag.pbtxttensorflow.linalg.-linear-operator-circulant.pbtxttensorflow.linalg.-linear-operator-circulant2-d.pbtxttensorflow.linalg.-linear-operator-circulant3-d.pbtxttensorflow.linalg.-linear-operator-composition.pbtxttensorflow.linalg.-linear-operator-diag.pbtxttensorflow.linalg.-linear-operator-full-matrix.pbtxttensorflow.linalg.-linear-operator-householder.pbtxttensorflow.linalg.-linear-operator-identity.pbtxttensorflow.linalg.-linear-operator-inversion.pbtxttensorflow.linalg.-linear-operator-kronecker.pbtxttensorflow.linalg.-linear-operator-low-rank-update.pbtxttensorflow.linalg.-linear-operator-lower-triangular.pbtxttensorflow.linalg.-linear-operator-permutation.pbtxttensorflow.linalg.-linear-operator-scaled-identity.pbtxttensorflow.linalg.-linear-operator-toeplitz.pbtxttensorflow.linalg.-linear-operator-zeros.pbtxttensorflow.linalg.-linear-operator.pbtxt
v2
tensorflow.linalg.-linear-operator-adjoint.pbtxttensorflow.linalg.-linear-operator-block-diag.pbtxttensorflow.linalg.-linear-operator-circulant.pbtxttensorflow.linalg.-linear-operator-circulant2-d.pbtxttensorflow.linalg.-linear-operator-circulant3-d.pbtxttensorflow.linalg.-linear-operator-composition.pbtxttensorflow.linalg.-linear-operator-diag.pbtxttensorflow.linalg.-linear-operator-full-matrix.pbtxttensorflow.linalg.-linear-operator-householder.pbtxttensorflow.linalg.-linear-operator-identity.pbtxttensorflow.linalg.-linear-operator-inversion.pbtxttensorflow.linalg.-linear-operator-kronecker.pbtxttensorflow.linalg.-linear-operator-low-rank-update.pbtxttensorflow.linalg.-linear-operator-lower-triangular.pbtxttensorflow.linalg.-linear-operator-permutation.pbtxttensorflow.linalg.-linear-operator-scaled-identity.pbtxttensorflow.linalg.-linear-operator-toeplitz.pbtxttensorflow.linalg.-linear-operator-zeros.pbtxttensorflow.linalg.-linear-operator.pbtxt
@ -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):
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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]
|
||||
|
@ -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
|
||||
|
||||
|
@ -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()
|
||||
|
@ -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))
|
||||
|
@ -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
|
||||
|
@ -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`."""
|
||||
|
@ -201,3 +201,6 @@ class LinearOperatorInversion(linear_operator.LinearOperator):
|
||||
|
||||
def _eigvals(self):
|
||||
return 1. / self.operator.eigvals()
|
||||
|
||||
def _cond(self):
|
||||
return self.operator.cond()
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
@ -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\'], "
|
||||
|
Loading…
Reference in New Issue
Block a user