| 157 | |
| 158 | |
| 159 | def test_trivial_broadcasting(): |
| 160 | trivial, vectorized_is_trivial = m.trivial, m.vectorized_is_trivial |
| 161 | |
| 162 | assert vectorized_is_trivial(1, 2, 3) == trivial.c_trivial |
| 163 | assert vectorized_is_trivial(np.array(1), np.array(2), 3) == trivial.c_trivial |
| 164 | assert ( |
| 165 | vectorized_is_trivial(np.array([1, 3]), np.array([2, 4]), 3) |
| 166 | == trivial.c_trivial |
| 167 | ) |
| 168 | assert trivial.c_trivial == vectorized_is_trivial( |
| 169 | np.array([[1, 3, 5], [7, 9, 11]]), np.array([[2, 4, 6], [8, 10, 12]]), 3 |
| 170 | ) |
| 171 | assert ( |
| 172 | vectorized_is_trivial(np.array([[1, 2, 3], [4, 5, 6]]), np.array([2, 3, 4]), 2) |
| 173 | == trivial.non_trivial |
| 174 | ) |
| 175 | assert ( |
| 176 | vectorized_is_trivial(np.array([[1, 2, 3], [4, 5, 6]]), np.array([[2], [3]]), 2) |
| 177 | == trivial.non_trivial |
| 178 | ) |
| 179 | z1 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]], dtype="int32") |
| 180 | z2 = np.array(z1, dtype="float32") |
| 181 | z3 = np.array(z1, dtype="float64") |
| 182 | assert vectorized_is_trivial(z1, z2, z3) == trivial.c_trivial |
| 183 | assert vectorized_is_trivial(1, z2, z3) == trivial.c_trivial |
| 184 | assert vectorized_is_trivial(z1, 1, z3) == trivial.c_trivial |
| 185 | assert vectorized_is_trivial(z1, z2, 1) == trivial.c_trivial |
| 186 | assert vectorized_is_trivial(z1[::2, ::2], 1, 1) == trivial.non_trivial |
| 187 | assert vectorized_is_trivial(1, 1, z1[::2, ::2]) == trivial.c_trivial |
| 188 | assert vectorized_is_trivial(1, 1, z3[::2, ::2]) == trivial.non_trivial |
| 189 | assert vectorized_is_trivial(z1, 1, z3[1::4, 1::4]) == trivial.c_trivial |
| 190 | |
| 191 | y1 = np.array(z1, order="F") |
| 192 | y2 = np.array(y1) |
| 193 | y3 = np.array(y1) |
| 194 | assert vectorized_is_trivial(y1, y2, y3) == trivial.f_trivial |
| 195 | assert vectorized_is_trivial(y1, 1, 1) == trivial.f_trivial |
| 196 | assert vectorized_is_trivial(1, y2, 1) == trivial.f_trivial |
| 197 | assert vectorized_is_trivial(1, 1, y3) == trivial.f_trivial |
| 198 | assert vectorized_is_trivial(y1, z2, 1) == trivial.non_trivial |
| 199 | assert vectorized_is_trivial(z1[1::4, 1::4], y2, 1) == trivial.f_trivial |
| 200 | assert vectorized_is_trivial(y1[1::4, 1::4], z2, 1) == trivial.c_trivial |
| 201 | |
| 202 | assert m.vectorized_func(z1, z2, z3).flags.c_contiguous |
| 203 | assert m.vectorized_func(y1, y2, y3).flags.f_contiguous |
| 204 | assert m.vectorized_func(z1, 1, 1).flags.c_contiguous |
| 205 | assert m.vectorized_func(1, y2, 1).flags.f_contiguous |
| 206 | assert m.vectorized_func(z1[1::4, 1::4], y2, 1).flags.f_contiguous |
| 207 | assert m.vectorized_func(y1[1::4, 1::4], z2, 1).flags.c_contiguous |
| 208 | |
| 209 | |
| 210 | def test_passthrough_arguments(doc): |