10cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower# Copyright 2017 The TensorFlow Authors. All Rights Reserved. 20cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower# 30cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower# Licensed under the Apache License, Version 2.0 (the "License"); 40cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower# you may not use this file except in compliance with the License. 50cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower# You may obtain a copy of the License at 60cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower# 70cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower# http://www.apache.org/licenses/LICENSE-2.0 80cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower# 90cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower# Unless required by applicable law or agreed to in writing, software 100cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower# distributed under the License is distributed on an "AS IS" BASIS, 110cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 120cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower# See the License for the specific language governing permissions and 130cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower# limitations under the License. 140cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower# ============================================================================== 150cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower"""Operations for linear algebra.""" 160cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower 170cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlowerfrom __future__ import absolute_import 180cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlowerfrom __future__ import division 190cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlowerfrom __future__ import print_function 200cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower 210cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlowerfrom tensorflow.python.framework import ops 220cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlowerfrom tensorflow.python.ops import array_ops 230cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlowerfrom tensorflow.python.ops import gen_linalg_ops 24f0aa811ee71ef2a54c67a1311557b331379a56e6A. Unique TensorFlowerfrom tensorflow.python.ops import linalg_ops 250cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlowerfrom tensorflow.python.ops import math_ops 26f0aa811ee71ef2a54c67a1311557b331379a56e6A. Unique TensorFlowerfrom tensorflow.python.ops import special_math_ops 275fb3c20b2f864bf88540fe5aaef3df4e70c2a6adAnna Rfrom tensorflow.python.util.tf_export import tf_export 28f0aa811ee71ef2a54c67a1311557b331379a56e6A. Unique TensorFlower 29f0aa811ee71ef2a54c67a1311557b331379a56e6A. Unique TensorFlower# Linear algebra ops. 30f0aa811ee71ef2a54c67a1311557b331379a56e6A. Unique TensorFlowerband_part = array_ops.matrix_band_part 31f0aa811ee71ef2a54c67a1311557b331379a56e6A. Unique TensorFlowercholesky = linalg_ops.cholesky 32f0aa811ee71ef2a54c67a1311557b331379a56e6A. Unique TensorFlowercholesky_solve = linalg_ops.cholesky_solve 33f0aa811ee71ef2a54c67a1311557b331379a56e6A. Unique TensorFlowerdet = linalg_ops.matrix_determinant 34f0aa811ee71ef2a54c67a1311557b331379a56e6A. Unique TensorFlower# pylint: disable=protected-access 35f0aa811ee71ef2a54c67a1311557b331379a56e6A. Unique TensorFlowerslogdet = gen_linalg_ops._log_matrix_determinant 36f0aa811ee71ef2a54c67a1311557b331379a56e6A. Unique TensorFlower# pylint: disable=protected-access 37f0aa811ee71ef2a54c67a1311557b331379a56e6A. Unique TensorFlowerdiag = array_ops.matrix_diag 38f0aa811ee71ef2a54c67a1311557b331379a56e6A. Unique TensorFlowerdiag_part = array_ops.matrix_diag_part 39f0aa811ee71ef2a54c67a1311557b331379a56e6A. Unique TensorFlowereigh = linalg_ops.self_adjoint_eig 40f0aa811ee71ef2a54c67a1311557b331379a56e6A. Unique TensorFlowereigvalsh = linalg_ops.self_adjoint_eigvals 41f0aa811ee71ef2a54c67a1311557b331379a56e6A. Unique TensorFlowereinsum = special_math_ops.einsum 42da1b1d28faca9aa65e832b9bbada8d509ea2df7dA. Unique TensorFlowerexpm = gen_linalg_ops._matrix_exponential 43f0aa811ee71ef2a54c67a1311557b331379a56e6A. Unique TensorFlowereye = linalg_ops.eye 44f0aa811ee71ef2a54c67a1311557b331379a56e6A. Unique TensorFlowerinv = linalg_ops.matrix_inverse 4541df0c81c0f402fb7ba7c8988a7054c69a0f8346A. Unique TensorFlowerlogm = gen_linalg_ops._matrix_logarithm 46f0aa811ee71ef2a54c67a1311557b331379a56e6A. Unique TensorFlowerlstsq = linalg_ops.matrix_solve_ls 47f0aa811ee71ef2a54c67a1311557b331379a56e6A. Unique TensorFlowernorm = linalg_ops.norm 48f0aa811ee71ef2a54c67a1311557b331379a56e6A. Unique TensorFlowerqr = linalg_ops.qr 49f0aa811ee71ef2a54c67a1311557b331379a56e6A. Unique TensorFlowerset_diag = array_ops.matrix_set_diag 50f0aa811ee71ef2a54c67a1311557b331379a56e6A. Unique TensorFlowersolve = linalg_ops.matrix_solve 51f0aa811ee71ef2a54c67a1311557b331379a56e6A. Unique TensorFlowersvd = linalg_ops.svd 52f0aa811ee71ef2a54c67a1311557b331379a56e6A. Unique TensorFlowertensordot = math_ops.tensordot 53f0aa811ee71ef2a54c67a1311557b331379a56e6A. Unique TensorFlowertrace = math_ops.trace 54f0aa811ee71ef2a54c67a1311557b331379a56e6A. Unique TensorFlowertranspose = array_ops.matrix_transpose 55f0aa811ee71ef2a54c67a1311557b331379a56e6A. Unique TensorFlowertriangular_solve = linalg_ops.matrix_triangular_solve 560cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower 570cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower 585fb3c20b2f864bf88540fe5aaef3df4e70c2a6adAnna R@tf_export('linalg.logdet') 590cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlowerdef logdet(matrix, name=None): 600cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower """Computes log of the determinant of a hermitian positive definite matrix. 610cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower 620cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower ```python 630cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower # Compute the determinant of a matrix while reducing the chance of over- or 640cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower underflow: 650cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower A = ... # shape 10 x 10 660cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower det = tf.exp(tf.logdet(A)) # scalar 670cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower ``` 680cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower 690cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower Args: 70f85f23bea87ea856ac839806b5d62f4257fb684bJoshua V. Dillon matrix: A `Tensor`. Must be `float16`, `float32`, `float64`, `complex64`, 71f85f23bea87ea856ac839806b5d62f4257fb684bJoshua V. Dillon or `complex128` with shape `[..., M, M]`. 720cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower name: A name to give this `Op`. Defaults to `logdet`. 730cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower 740cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower Returns: 750cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower The natural log of the determinant of `matrix`. 760cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower 770cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower @compatibility(numpy) 780cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower Equivalent to numpy.linalg.slogdet, although no sign is returned since only 790cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower hermitian positive definite matrices are supported. 800cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower @end_compatibility 810cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower """ 820cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower # This uses the property that the log det(A) = 2*sum(log(real(diag(C)))) 830cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower # where C is the cholesky decomposition of A. 840cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower with ops.name_scope(name, 'logdet', [matrix]): 850cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower chol = gen_linalg_ops.cholesky(matrix) 860cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower return 2.0 * math_ops.reduce_sum( 870cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower math_ops.log(math_ops.real(array_ops.matrix_diag_part(chol))), 880cff60ebb29f5aba5092988c8b7f13c258115e81A. Unique TensorFlower reduction_indices=[-1]) 89d835d677ade78a41e0e097f67c87b6ab8588a90aA. Unique TensorFlower 90d835d677ade78a41e0e097f67c87b6ab8588a90aA. Unique TensorFlower 915fb3c20b2f864bf88540fe5aaef3df4e70c2a6adAnna R@tf_export('linalg.adjoint') 92d835d677ade78a41e0e097f67c87b6ab8588a90aA. Unique TensorFlowerdef adjoint(matrix, name=None): 93bc52fbda2bbe458c9ff5f20ebc48188959ebe026A. Unique TensorFlower """Transposes the last two dimensions of and conjugates tensor `matrix`. 94d835d677ade78a41e0e097f67c87b6ab8588a90aA. Unique TensorFlower 95d835d677ade78a41e0e097f67c87b6ab8588a90aA. Unique TensorFlower For example: 96d835d677ade78a41e0e097f67c87b6ab8588a90aA. Unique TensorFlower 97d835d677ade78a41e0e097f67c87b6ab8588a90aA. Unique TensorFlower ```python 98d835d677ade78a41e0e097f67c87b6ab8588a90aA. Unique TensorFlower x = tf.constant([[1 + 1j, 2 + 2j, 3 + 3j], 99d835d677ade78a41e0e097f67c87b6ab8588a90aA. Unique TensorFlower [4 + 4j, 5 + 5j, 6 + 6j]]) 100d835d677ade78a41e0e097f67c87b6ab8588a90aA. Unique TensorFlower tf.linalg.adjoint(x) # [[1 - 1j, 4 - 4j], 101d835d677ade78a41e0e097f67c87b6ab8588a90aA. Unique TensorFlower # [2 - 2j, 5 - 5j], 102d835d677ade78a41e0e097f67c87b6ab8588a90aA. Unique TensorFlower # [3 - 3j, 6 - 6j]] 103d835d677ade78a41e0e097f67c87b6ab8588a90aA. Unique TensorFlower 104d835d677ade78a41e0e097f67c87b6ab8588a90aA. Unique TensorFlower Args: 105f85f23bea87ea856ac839806b5d62f4257fb684bJoshua V. Dillon matrix: A `Tensor`. Must be `float16`, `float32`, `float64`, `complex64`, 106f85f23bea87ea856ac839806b5d62f4257fb684bJoshua V. Dillon or `complex128` with shape `[..., M, M]`. 107d835d677ade78a41e0e097f67c87b6ab8588a90aA. Unique TensorFlower name: A name to give this `Op` (optional). 108d835d677ade78a41e0e097f67c87b6ab8588a90aA. Unique TensorFlower 109d835d677ade78a41e0e097f67c87b6ab8588a90aA. Unique TensorFlower Returns: 110d835d677ade78a41e0e097f67c87b6ab8588a90aA. Unique TensorFlower The adjoint (a.k.a. Hermitian transpose a.k.a. conjugate transpose) of 111d835d677ade78a41e0e097f67c87b6ab8588a90aA. Unique TensorFlower matrix. 112d835d677ade78a41e0e097f67c87b6ab8588a90aA. Unique TensorFlower """ 113d835d677ade78a41e0e097f67c87b6ab8588a90aA. Unique TensorFlower with ops.name_scope(name, 'adjoint', [matrix]): 114bc52fbda2bbe458c9ff5f20ebc48188959ebe026A. Unique TensorFlower matrix = ops.convert_to_tensor(matrix, name='matrix') 115d835d677ade78a41e0e097f67c87b6ab8588a90aA. Unique TensorFlower return array_ops.matrix_transpose(matrix, conjugate=True) 116