def _test_orthogonal_unitary(predicate): assert ask(predicate(X), predicate(X)) assert ask(predicate(X.T), predicate(X)) is True assert ask(predicate(X.I), predicate(X)) is True assert ask(predicate(Y)) is False assert ask(predicate(X)) is None assert ask(predicate(X * Z * X), predicate(X) & predicate(Z)) is True assert ask(predicate(Identity(3))) is True assert ask(predicate(ZeroMatrix(3, 3))) is False assert ask(Q.invertible(X), predicate(X)) assert not ask(predicate(X + Z), predicate(X) & predicate(Z))
def test_issue_9817_simplify(): # simplify on trace of substituted explicit quadratic form of matrix # expressions (a scalar) should return without errors (AttributeError) # See issue #9817 and #9190 for the original bug more discussion on this from sympy.matrices.expressions import Identity, trace v = MatrixSymbol('v', 3, 1) A = MatrixSymbol('A', 3, 3) x = Matrix([i + 1 for i in range(3)]) X = Identity(3) quadratic = v.T * A * v assert simplify((trace(quadratic.as_explicit())).xreplace({v:x, A:X})) == 14
def test_invertible(): assert ask(Q.invertible(X), Q.invertible(X)) assert ask(Q.invertible(Y)) is False assert ask(Q.invertible(X*Y), Q.invertible(X)) is False assert ask(Q.invertible(X*Z), Q.invertible(X)) is None assert ask(Q.invertible(X*Z), Q.invertible(X) & Q.invertible(Z)) is True assert ask(Q.invertible(X.T)) is None assert ask(Q.invertible(X.T), Q.invertible(X)) is True assert ask(Q.invertible(X.I)) is True assert ask(Q.invertible(Identity(3))) is True assert ask(Q.invertible(ZeroMatrix(3, 3))) is False assert ask(Q.invertible(X), Q.fullrank(X) & Q.square(X))
def test_fullrank(): assert ask(Q.fullrank(X), Q.fullrank(X)) assert ask(Q.fullrank(X**2), Q.fullrank(X)) assert ask(Q.fullrank(X.T), Q.fullrank(X)) is True assert ask(Q.fullrank(X)) is None assert ask(Q.fullrank(Y)) is None assert ask(Q.fullrank(X * Z), Q.fullrank(X) & Q.fullrank(Z)) is True assert ask(Q.fullrank(Identity(3))) is True assert ask(Q.fullrank(ZeroMatrix(3, 3))) is False assert ask(Q.fullrank(OneMatrix(1, 1))) is True assert ask(Q.fullrank(OneMatrix(3, 3))) is False assert ask(Q.invertible(X), ~Q.fullrank(X)) == False
def test_diagonal(): assert ask(Q.diagonal(X + Z.T + Identity(2)), Q.diagonal(X) & Q.diagonal(Z)) is True assert ask(Q.diagonal(ZeroMatrix(3, 3))) assert ask(Q.diagonal(OneMatrix(1, 1))) is True assert ask(Q.diagonal(OneMatrix(3, 3))) is False assert ask(Q.lower_triangular(X) & Q.upper_triangular(X), Q.diagonal(X)) assert ask(Q.diagonal(X), Q.lower_triangular(X) & Q.upper_triangular(X)) assert ask(Q.symmetric(X), Q.diagonal(X)) assert ask(Q.triangular(X), Q.diagonal(X)) assert ask(Q.diagonal(C0x0)) assert ask(Q.diagonal(A1x1)) assert ask(Q.diagonal(A1x1 + B1x1)) assert ask(Q.diagonal(A1x1 * B1x1)) assert ask(Q.diagonal(V1.T * V2)) assert ask(Q.diagonal(V1.T * (X + Z) * V1)) assert ask(Q.diagonal(MatrixSlice(Y, (0, 1), (1, 2)))) is True assert ask(Q.diagonal(V1.T * (V1 + V2))) is True assert ask(Q.diagonal(X**3), Q.diagonal(X)) assert ask(Q.diagonal(Identity(3))) assert ask(Q.diagonal(DiagMatrix(V1))) assert ask(Q.diagonal(DiagonalMatrix(X)))
def test_issue_21866(): n = 10 I = Identity(n) O = ZeroMatrix(n, n) A = BlockMatrix([[ I, O, O, O ], [ O, I, O, O ], [ O, O, I, O ], [ I, O, O, I ]]) Ainv = block_collapse(A.inv()) AinvT = BlockMatrix([[ I, O, O, O ], [ O, I, O, O ], [ O, O, I, O ], [ -I, O, O, I ]]) assert Ainv == AinvT
def test_positive_definite(): assert ask(Q.positive_definite(X), Q.positive_definite(X)) assert ask(Q.positive_definite(X.T), Q.positive_definite(X)) is True assert ask(Q.positive_definite(X.I), Q.positive_definite(X)) is True assert ask(Q.positive_definite(Y)) is False assert ask(Q.positive_definite(X)) is None assert ask(Q.positive_definite(X*Z*X), Q.positive_definite(X) & Q.positive_definite(Z)) is True assert ask(Q.positive_definite(X), Q.orthogonal(X)) assert ask(Q.positive_definite(Y.T*X*Y), Q.positive_definite(X) & Q.fullrank(Y)) is True assert not ask(Q.positive_definite(Y.T*X*Y), Q.positive_definite(X)) assert ask(Q.positive_definite(Identity(3))) is True assert ask(Q.positive_definite(ZeroMatrix(3, 3))) is False assert ask(Q.positive_definite(X + Z), Q.positive_definite(X) & Q.positive_definite(Z)) is True assert not ask(Q.positive_definite(-X), Q.positive_definite(X)) assert ask(Q.positive(X[1, 1]), Q.positive_definite(X))
def test_symmetric(): assert ask(Q.symmetric(X), Q.symmetric(X)) assert ask(Q.symmetric(X * Z), Q.symmetric(X)) is None assert ask(Q.symmetric(X * Z), Q.symmetric(X) & Q.symmetric(Z)) is True assert ask(Q.symmetric(X + Z), Q.symmetric(X) & Q.symmetric(Z)) is True assert ask(Q.symmetric(Y)) is False assert ask(Q.symmetric(Y * Y.T)) is True assert ask(Q.symmetric(Y.T * X * Y)) is None assert ask(Q.symmetric(Y.T * X * Y), Q.symmetric(X)) is True assert ask(Q.symmetric(X**10), Q.symmetric(X)) is True assert ask(Q.symmetric(A1x1)) is True assert ask(Q.symmetric(A1x1 + B1x1)) is True assert ask(Q.symmetric(A1x1 * B1x1)) is True assert ask(Q.symmetric(V1.T * V1)) is True assert ask(Q.symmetric(V1.T * (V1 + V2))) is True assert ask(Q.symmetric(V1.T * (V1 + V2) + A1x1)) is True assert ask(Q.symmetric(MatrixSlice(Y, (0, 1), (1, 2)))) is True assert ask(Q.symmetric(Identity(3))) is True assert ask(Q.symmetric(ZeroMatrix(3, 3))) is True assert ask(Q.symmetric(OneMatrix(3, 3))) is True
def __init__(self, *args, **kwargs): """ Initialises a PointLight object. To initialize a point light, we need to supply a name(optional), a reference frame, and a point. Parameters ========== name : str, optional Name assigned to VisualizationFrame, default is unnamed reference_frame : ReferenceFrame A reference_frame with respect to which all orientations of the shape takes place, during visualizations/animations. origin : Point A point with respect to which all the translations of the shape takes place, during visualizations/animations. rigidbody : RigidBody A rigidbody whose reference frame and mass center are to be assigned as reference_frame and origin of the VisualizationFrame. particle : Particle A particle whose point is assigned as origin of the VisualizationFrame. Examples ======== >>> from pydy.viz import PointLight >>> from sympy.physics.mechanics import \ ReferenceFrame, Point, RigidBody, \ Particle, inertia >>> from sympy import symbols >>> I = ReferenceFrame('I') >>> O = Point('O') >>> #initializing with reference frame, point >>> light = PointLight('light', I, O) >>> Ixx, Iyy, Izz, mass = symbols('Ixx Iyy Izz mass') >>> i = inertia(I, Ixx, Iyy, Izz) >>> rbody = RigidBody('rbody', O, I, mass, (inertia, O)) >>> # Initializing with a rigidbody .. >>> light = PointLight('frame2', rbody) >>> Pa = Particle('Pa', O, mass) >>> #initializing with Particle, reference_frame ... >>> light = PointLight('frame3', I, Pa) """ try: self._color = kwargs['color'] except KeyError: self._color = 'white' #Now we use same approach as in VisualizationFrame #for setting reference_frame and origin i = 0 #If first arg is not str, name the visualization frame 'unnamed' if isinstance(args[i], str): self._name = args[i] i += 1 else: self._name = 'unnamed' try: self._reference_frame = args[i].get_frame() self._origin = args[i].get_masscenter() except AttributeError: #It is not a rigidbody, hence this arg should be a #reference frame try: dcm = args[i]._dcm_dict self._reference_frame = args[i] i += 1 except AttributeError: raise TypeError(''' A ReferenceFrame is to be supplied before a Particle/Point. ''') #Now next arg can either be a Particle or point try: self._origin = args[i].get_point() except AttributeError: self._origin = args[i] #basic thing required, transform matrix self._transform = Identity(4).as_mutable()
def test_eval_determinant(): assert det(Identity(n)) == 1 assert det(ZeroMatrix(n, n)) == 0 assert det(Transpose(A)) == det(A)
def test_invertible_BlockDiagMatrix(): assert ask(Q.invertible(BlockDiagMatrix(Identity(3), Identity(5)))) == True assert ask(Q.invertible(BlockDiagMatrix(ZeroMatrix(3, 3), Identity(5)))) == False assert ask(Q.invertible(BlockDiagMatrix(Identity(3), OneMatrix(5, 5)))) == False
def __init__(self, *args, **kwargs): """ Initialises a PerspectiveCamera object. To initialize a visualization frame, we need to supply a name(optional), a reference frame, a point, field of view(fov) (optional), near plane distance(optional) and far plane distance(optional). Examples ======== >>> from pydy.viz import VisualizationFrame, Shape >>> from sympy.physics.mechanics import \ ReferenceFrame, Point, RigidBody, \ Particle, inertia >>> from sympy import symbols >>> I = ReferenceFrame('I') >>> O = Point('O') >>> shape = Shape() >>> #initializing with reference frame, point >>> camera1 = PerspectiveCamera('frame1', I, O) >>> Ixx, Iyy, Izz, mass = symbols('Ixx Iyy Izz mass') >>> i = inertia(I, Ixx, Iyy, Izz) >>> rbody = RigidBody('rbody', O, I, mass, (inertia, O)) >>> # Initializing with a rigidbody .. >>> camera2 = PerspectiveCamera('frame2', rbody) >>> Pa = Particle('Pa', O, mass) >>> #initializing with Particle, reference_frame ... >>> camera3 = PerspectiveCamera('frame3', I, Pa) """ try: self._fov = kwargs['fov'] except KeyError: self._fov = 45 try: self._near = kwargs['near'] except KeyError: self._near = 1 try: self._far = kwargs['far'] except KeyError: self._far = 1000 #Now we use same approach as in VisualizationFrame #for setting reference_frame and origin i = 0 #If first arg is not str, name the visualization frame 'unnamed' if isinstance(args[i], str): self._name = args[i] i += 1 else: self._name = 'unnamed' try: self._reference_frame = args[i].get_frame() self._origin = args[i].get_masscenter() except AttributeError: #It is not a rigidbody, hence this arg should be a #reference frame try: dcm = args[i]._dcm_dict self._reference_frame = args[i] i += 1 except AttributeError: raise TypeError(''' A ReferenceFrame is to be supplied before a Particle/Point. ''') #Now next arg can either be a Particle or point try: self._origin = args[i].get_point() except AttributeError: self._origin = args[i] #basic thing required, transform matrix self._transform = Identity(4).as_mutable()
def __init__(self, *args, **kwargs): """ Initialises an OrthoGraphicCamera object. To initialize a visualization frame, we need to supply a name (optional), a reference frame, a point, near plane distance (optional) and far plane distance (optional). Examples ======== >>> from pydy.viz import OrthoGraphicCamera >>> from sympy.physics.mechanics import (ReferenceFrame, Point, ... RigidBody, Particle, ... inertia) >>> from sympy import symbols >>> I = ReferenceFrame('I') >>> O = Point('O') >>> shape = Shape() >>> # Initializing with ReferenceFrame, Point >>> camera1 = OrthoGraphicCamera('frame1', I, O) >>> Ixx, Iyy, Izz, mass = symbols('Ixx Iyy Izz mass') >>> i = inertia(I, Ixx, Iyy, Izz) >>> rbody = RigidBody('rbody', O, I, mass, (inertia, O)) >>> # Initializing with a Rigidbody >>> camera2 = OrthoGraphicCamera('frame2', rbody) >>> Pa = Particle('Pa', O, mass) >>> # Initializing with Particle, ReferenceFrame >>> camera3 = OrthoGraphicCamera('frame3', I, Pa) """ try: self._near = kwargs['near'] except KeyError: self._near = 1 try: self._far = kwargs['far'] except KeyError: self._far = 1000 # Now we use same approach as in VisualizationFrame for setting # reference_frame and origin i = 0 # If first arg is not str, name the visualization frame 'unnamed' if isinstance(args[i], str): self._name = args[i] i += 1 else: self._name = 'unnamed' try: self._reference_frame = args[i].get_frame() self._origin = args[i].get_masscenter() except AttributeError: # It is not a rigidbody, hence this arg should be a reference # frame. self._reference_frame = args[i] i += 1 # Now next arg can either be a Particle or point try: self._origin = args[i].get_point() except AttributeError: self._origin = args[i] # basic thing required, transform matrix self._transform = Identity(4).as_mutable()