1from sympy.testing.pytest import raises
2from sympy import (
3    Array, ImmutableDenseNDimArray, ImmutableSparseNDimArray,
4    MutableDenseNDimArray, MutableSparseNDimArray, sin, cos,
5    simplify, Matrix
6)
7from sympy.abc import x, y
8
9array_types = [
10    ImmutableDenseNDimArray,
11    ImmutableSparseNDimArray,
12    MutableDenseNDimArray,
13    MutableSparseNDimArray
14]
15
16
17def test_array_negative_indices():
18    for ArrayType in array_types:
19        test_array = ArrayType([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
20        assert test_array[:, -1] == Array([5, 10])
21        assert test_array[:, -2] == Array([4, 9])
22        assert test_array[:, -3] == Array([3, 8])
23        assert test_array[:, -4] == Array([2, 7])
24        assert test_array[:, -5] == Array([1, 6])
25        assert test_array[:, 0] == Array([1, 6])
26        assert test_array[:, 1] == Array([2, 7])
27        assert test_array[:, 2] == Array([3, 8])
28        assert test_array[:, 3] == Array([4, 9])
29        assert test_array[:, 4] == Array([5, 10])
30
31        raises(ValueError, lambda: test_array[:, -6])
32        raises(ValueError, lambda: test_array[-3, :])
33
34        assert test_array[-1, -1] == 10
35
36
37def test_issue_18361():
38    A = Array([sin(2 * x) - 2 * sin(x) * cos(x)])
39    B = Array([sin(x)**2 + cos(x)**2, 0])
40    C = Array([(x + x**2)/(x*sin(y)**2 + x*cos(y)**2), 2*sin(x)*cos(x)])
41    assert simplify(A) == Array([0])
42    assert simplify(B) == Array([1, 0])
43    assert simplify(C) == Array([x + 1, sin(2*x)])
44
45def test_issue_20222():
46    A = Array([[1, 2], [3, 4]])
47    B = Matrix([[1,2],[3,4]])
48    raises(TypeError, lambda: A - B)
49