def test_Percept(): # Automatic axes: ndarray = np.arange(15).reshape((3, 5, 1)) percept = Percept(ndarray, metadata='meta') npt.assert_equal(percept.shape, ndarray.shape) npt.assert_equal(percept.metadata, 'meta') npt.assert_equal(hasattr(percept, 'xdva'), True) npt.assert_almost_equal(percept.xdva, np.arange(ndarray.shape[1])) npt.assert_equal(hasattr(percept, 'ydva'), True) npt.assert_almost_equal(percept.ydva, np.arange(ndarray.shape[0])) # Singleton dimensions can be None: npt.assert_equal(hasattr(percept, 'time'), True) npt.assert_equal(percept.time, None) # Specific labels: percept = Percept(ndarray, time=0.4) npt.assert_almost_equal(percept.time, [0.4]) percept = Percept(ndarray, time=[0.4]) npt.assert_almost_equal(percept.time, [0.4]) # Labels from a grid. y_range = (-1, 1) x_range = (-2, 2) grid = Grid2D(x_range, y_range) percept = Percept(ndarray, space=grid) npt.assert_almost_equal(percept.xdva, grid._xflat) npt.assert_almost_equal(percept.ydva, grid._yflat) npt.assert_equal(percept.time, None) grid = Grid2D(x_range, y_range) percept = Percept(ndarray, space=grid, time=0) npt.assert_almost_equal(percept.xdva, grid._xflat) npt.assert_almost_equal(percept.ydva, grid._yflat) npt.assert_almost_equal(percept.time, [0]) # Gray levels for n_gray in [2, 4]: percept = Percept(np.arange(49, dtype=float).reshape((7, 7, 1)), n_gray=n_gray) npt.assert_equal(len(np.unique(percept.data)), n_gray) with pytest.raises(TypeError): Percept(ndarray, space={'x': [0, 1, 2], 'y': [0, 1, 2, 3, 4]}) with pytest.raises(ValueError): Percept(ndarray, n_gray=1.2) with pytest.raises(ValueError): Percept(ndarray, n_gray=-3) # Noise: data = np.arange(100, dtype=float).reshape((5, 5, 4)) npt.assert_almost_equal(Percept(data, noise=0).data, data) npt.assert_almost_equal(Percept(data, noise=0.0).data, data) for noise in [0.5, 1.0]: percept = Percept(data, noise=noise) n_white = sum(np.isclose(percept.data.ravel(), 99.0)) n_black = sum(np.isclose(percept.data.ravel(), 0.0)) npt.assert_equal(abs(n_white - 0.5 * noise * data.size) <= 2, True) npt.assert_equal(abs(n_black - 0.5 * noise * data.size) <= 2, True)
def test_Grid2D_plot(): grid = Grid2D((-20, 20), (-40, 40), step=0.5) ax = grid.plot() npt.assert_equal(isinstance(ax, Axes), True) npt.assert_almost_equal(ax.get_xlim(), (-22, 22)) # You can change the scaling: ax = grid.plot(transform=lambda x, y: (2 * x, 2 * y)) npt.assert_equal(isinstance(ax, Axes), True) npt.assert_almost_equal(ax.get_xlim(), (-44, 44)) # You can change the figure size ax = grid.plot(figsize=(9, 7)) npt.assert_almost_equal(ax.figure.get_size_inches(), (9, 7)) # You can change the style (smoke test): ax = grid.plot(style='hull') ax = grid.plot(style='cell') ax = grid.plot(style='scatter') # Step might be a tuple (smoke test): Grid2D((-5, 5), (-5, 5), step=(0.5, 1)).plot(style='cell')
def test_Grid2D_make_rectangular_grid(): # Range is a multiple of step size: grid = Grid2D((-1, 1), (0, 0), step=1) npt.assert_almost_equal(grid.x, [[-1, 0, 1]]) npt.assert_almost_equal(grid.y, [[0, 0, 0]]) for mlt in [0.01, 0.1, 1, 10, 100]: grid = Grid2D((-10 * mlt, 10 * mlt), (-10 * mlt, 10 * mlt), step=5 * mlt) npt.assert_almost_equal(grid.x[0], mlt * np.array([-10, -5, 0, 5, 10])) npt.assert_almost_equal(grid.y[:, 0], mlt * np.array([-10, -5, 0, 5, 10])) # Another way to verify this is to manually check the step size: for step in [0.25, 0.5, 1, 2]: grid = Grid2D((-20, 20), (-40, 40), step=step) npt.assert_equal(len(np.unique(np.diff(grid.x[0, :]))), 1) npt.assert_equal(len(np.unique(np.diff(grid.y[:, 0]))), 1) npt.assert_almost_equal(np.unique(np.diff(grid.x[0, :]))[0], step) npt.assert_almost_equal(np.unique(np.diff(grid.y[:, 0]))[0], step) # Step size just a little too small/big to fit into range. In this case, # the step size gets adjusted so that the range is as specified by the # user: grid = Grid2D((-1, 1), (0, 0), step=0.33) npt.assert_almost_equal(grid.x, [[-1, -2 / 3, -1 / 3, 0, 1 / 3, 2 / 3, 1]]) npt.assert_almost_equal(grid.y, [[0, 0, 0, 0, 0, 0, 0]]) grid = Grid2D((-1, 1), (0, 0), step=0.34) npt.assert_almost_equal(grid.x, [[-1, -2 / 3, -1 / 3, 0, 1 / 3, 2 / 3, 1]]) npt.assert_almost_equal(grid.y, [[0, 0, 0, 0, 0, 0, 0]]) # Different step size for x and y: grid = Grid2D((-1, 1), (0, 0), step=(0.5, 1)) npt.assert_almost_equal(grid.x, [[-1, -0.5, 0, 0.5, 1]]) npt.assert_almost_equal(grid.y, [[0, 0, 0, 0, 0]]) grid = Grid2D((0, 0), (-1, 1), step=(2, 0.5)) npt.assert_almost_equal(grid.x, [[0], [0], [0], [0], [0]]) npt.assert_almost_equal(grid.y[:, 0], [-1, -0.5, 0, 0.5, 1]) # Same step size, but given explicitly: npt.assert_almost_equal( Grid2D((-3, 3), (8, 12), step=0.123).x, Grid2D((-3, 3), (8, 12), step=(0.123, 0.123)).x)
def test_Percept(): # Automatic axes: ndarray = np.arange(15).reshape((3, 5, 1)) percept = Percept(ndarray, metadata='meta') npt.assert_equal(percept.shape, ndarray.shape) npt.assert_equal(percept.metadata, 'meta') npt.assert_equal(hasattr(percept, 'xdva'), True) npt.assert_almost_equal(percept.xdva, np.arange(ndarray.shape[1])) npt.assert_equal(hasattr(percept, 'ydva'), True) npt.assert_almost_equal(percept.ydva, np.arange(ndarray.shape[0])) # Singleton dimensions can be None: npt.assert_equal(hasattr(percept, 'time'), True) npt.assert_equal(percept.time, None) # Specific labels: percept = Percept(ndarray, time=0.4) npt.assert_almost_equal(percept.time, [0.4]) percept = Percept(ndarray, time=[0.4]) npt.assert_almost_equal(percept.time, [0.4]) # Labels from a grid. y_range = (-1, 1) x_range = (-2, 2) grid = Grid2D(x_range, y_range) percept = Percept(ndarray, space=grid) npt.assert_almost_equal(percept.xdva, grid._xflat) npt.assert_almost_equal(percept.ydva, grid._yflat) npt.assert_equal(percept.time, None) grid = Grid2D(x_range, y_range) percept = Percept(ndarray, space=grid, time=0) npt.assert_almost_equal(percept.xdva, grid._xflat) npt.assert_almost_equal(percept.ydva, grid._yflat) npt.assert_almost_equal(percept.time, [0]) with pytest.raises(TypeError): Percept(ndarray, space={'x': [0, 1, 2], 'y': [0, 1, 2, 3, 4]})
def test_Percept_plot(): y_range = (-1, 1) x_range = (-2, 2) grid = Grid2D(x_range, y_range) percept = Percept(np.arange(15).reshape((3, 5, 1)), space=grid) # Basic usage of pcolor: ax = percept.plot(kind='pcolor') npt.assert_equal(isinstance(ax, Subplot), True) npt.assert_almost_equal(ax.axis(), [*x_range, *y_range]) frame = percept.get_brightest_frame() npt.assert_almost_equal(ax.collections[0].get_clim(), [frame.min(), frame.max()]) # Basic usage of hex: ax = percept.plot(kind='hex') npt.assert_equal(isinstance(ax, Subplot), True) npt.assert_almost_equal( ax.axis(), [percept.xdva[0], percept.xdva[-1], percept.ydva[0], percept.ydva[-1]]) npt.assert_almost_equal( ax.collections[0].get_clim(), [percept.data[..., 0].min(), percept.data[..., 0].max()]) # Verify color map: npt.assert_equal(ax.collections[0].cmap, plt.cm.gray) ax = percept.plot(cmap='inferno') npt.assert_equal(ax.collections[0].cmap, plt.cm.inferno) # Specify figsize: ax = percept.plot(kind='pcolor', figsize=(6, 4)) npt.assert_almost_equal(ax.figure.get_size_inches(), (6, 4)) # Invalid calls: with pytest.raises(ValueError): percept.plot(kind='invalid') with pytest.raises(TypeError): percept.plot(ax='invalid') # TODO with pytest.raises(NotImplementedError): percept.plot(time=3.3)
def test_Grid2D(x_range, y_range): grid = Grid2D(x_range, y_range, step=1, grid_type='rectangular') npt.assert_equal(grid.x_range, x_range) npt.assert_equal(grid.y_range, y_range) npt.assert_equal(grid.step, 1) npt.assert_equal(grid.type, 'rectangular') # Grid is created with indexing='xy', so check coordinates: npt.assert_equal( grid.x.shape, (np.abs(np.diff(y_range)) + 1, np.abs(np.diff(x_range)) + 1)) npt.assert_equal(grid.x.shape, grid.y.shape) npt.assert_equal(grid.x.shape, grid.shape) npt.assert_almost_equal(grid.x[0, 0], x_range[0]) npt.assert_almost_equal(grid.x[0, -1], x_range[1]) npt.assert_almost_equal(grid.x[-1, 0], x_range[0]) npt.assert_almost_equal(grid.x[-1, -1], x_range[1]) npt.assert_almost_equal(grid.y[0, 0], y_range[0]) npt.assert_almost_equal(grid.y[0, -1], y_range[0]) npt.assert_almost_equal(grid.y[-1, 0], y_range[1]) npt.assert_almost_equal(grid.y[-1, -1], y_range[1])
def test_Grid2D_plot(): grid = Grid2D((-20, 20), (-40, 40), step=0.5) ax = grid.plot() npt.assert_equal(isinstance(ax, Axes), True)