Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

from __future__ import print_function, division 

 

from sympy.core import Basic 

from sympy.functions import adjoint, conjugate 

from sympy.matrices.expressions.transpose import transpose 

from sympy.matrices.expressions.matexpr import MatrixExpr 

 

 

class Adjoint(MatrixExpr): 

    """ 

    The Hermitian adjoint of a matrix expression. 

 

    This is a symbolic object that simply stores its argument without 

    evaluating it. To actually compute the adjoint, use the ``adjoint()`` 

    function. 

 

    Examples 

    ======== 

 

    >>> from sympy.matrices import MatrixSymbol, Adjoint 

    >>> from sympy.functions import adjoint 

    >>> A = MatrixSymbol('A', 3, 5) 

    >>> B = MatrixSymbol('B', 5, 3) 

    >>> Adjoint(A*B) 

    Adjoint(A*B) 

    >>> adjoint(A*B) 

    Adjoint(B)*Adjoint(A) 

    >>> adjoint(A*B) == Adjoint(A*B) 

    False 

    >>> adjoint(A*B) == Adjoint(A*B).doit() 

    True 

    """ 

    is_Adjoint = True 

 

    def doit(self, **hints): 

        arg = self.arg 

        if hints.get('deep', True) and isinstance(arg, Basic): 

            return adjoint(arg.doit(**hints)) 

        else: 

            return adjoint(self.arg) 

 

    @property 

    def arg(self): 

        return self.args[0] 

 

    @property 

    def shape(self): 

        return self.arg.shape[::-1] 

 

    def _entry(self, i, j): 

        return conjugate(self.arg._entry(j, i)) 

 

    def _eval_adjoint(self): 

        return self.arg 

 

    def _eval_conjugate(self): 

        return transpose(self.arg) 

 

    def _eval_trace(self): 

        from sympy.matrices.expressions.trace import Trace 

        return conjugate(Trace(self.arg)) 

 

    def _eval_transpose(self): 

        return conjugate(self.arg)