| 1888 | self.assertEqual((mx.array(False) ^ True).item(), True) |
| 1889 | |
| 1890 | def test_inplace(self): |
| 1891 | iops = [ |
| 1892 | "__iadd__", |
| 1893 | "__isub__", |
| 1894 | "__imul__", |
| 1895 | "__ifloordiv__", |
| 1896 | "__imod__", |
| 1897 | "__ipow__", |
| 1898 | "__ixor__", |
| 1899 | ] |
| 1900 | |
| 1901 | for op in iops: |
| 1902 | a = mx.array([1, 2, 3]) |
| 1903 | a_np = np.array(a) |
| 1904 | b = a |
| 1905 | b = getattr(a, op)(3) |
| 1906 | self.assertTrue(mx.array_equal(a, b)) |
| 1907 | out_np = getattr(a_np, op)(3) |
| 1908 | self.assertTrue(np.array_equal(out_np, a)) |
| 1909 | |
| 1910 | with self.assertRaises(ValueError): |
| 1911 | a = mx.array([1]) |
| 1912 | a /= 1 |
| 1913 | |
| 1914 | a = mx.array([2.0]) |
| 1915 | b = a |
| 1916 | b /= 2 |
| 1917 | self.assertEqual(b.item(), 1.0) |
| 1918 | self.assertEqual(b.item(), a.item()) |
| 1919 | |
| 1920 | a = mx.array(True) |
| 1921 | b = a |
| 1922 | b &= False |
| 1923 | self.assertEqual(b.item(), False) |
| 1924 | self.assertEqual(b.item(), a.item()) |
| 1925 | |
| 1926 | a = mx.array(False) |
| 1927 | b = a |
| 1928 | b |= True |
| 1929 | self.assertEqual(b.item(), True) |
| 1930 | self.assertEqual(b.item(), a.item()) |
| 1931 | |
| 1932 | # In-place matmul on its own |
| 1933 | a = mx.array([[1.0, 2.0], [3.0, 4.0]]) |
| 1934 | b = a |
| 1935 | b @= a |
| 1936 | self.assertTrue(mx.array_equal(a, b)) |
| 1937 | |
| 1938 | a = mx.array(False) |
| 1939 | a ^= True |
| 1940 | self.assertEqual(a.item(), True) |
| 1941 | |
| 1942 | def test_inplace_preserves_ids(self): |
| 1943 | a = mx.array([1.0]) |