Skip to content

Commit

Permalink
refactor: change wording
Browse files Browse the repository at this point in the history
  • Loading branch information
tlambert03 committed Jan 30, 2023
1 parent e558c1e commit a053fad
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 20 deletions.
16 changes: 9 additions & 7 deletions src/useq/_tile.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
from functools import partial
import numpy as np
import math
from enum import Enum
from functools import partial
from typing import Any, Callable, Iterator, NamedTuple, Sequence, Tuple, Union

import numpy as np
from pydantic import validator


from useq._base_model import FrozenModel


Expand Down Expand Up @@ -67,6 +66,7 @@ def _spiral_indices(
def _rect_indices(
rows: int, columns: int, snake: bool = False, row_wise: bool = True
) -> Iterator[Tuple[int, int]]:
"""Return a row or column-wise iterator over a 2D grid."""
c, r = np.meshgrid(np.arange(columns), np.arange(rows))
if snake:
if row_wise:
Expand All @@ -76,7 +76,9 @@ def _rect_indices(
return zip(r.ravel(), c.ravel()) if row_wise else zip(r.T.ravel(), c.T.ravel())


_INDEX_GENERATORS: dict[OrderMode, Callable] = {
# used in iter_indices below, to determine the order in which indices are yielded
IndexGenerator = Callable[[int, int], Iterator[Tuple[int, int]]]
_INDEX_GENERATORS: dict[OrderMode, IndexGenerator] = {
OrderMode.row_wise: partial(_rect_indices, snake=False, row_wise=True),
OrderMode.column_wise: partial(_rect_indices, snake=False, row_wise=False),
OrderMode.row_wise_snake: partial(_rect_indices, snake=True, row_wise=True),
Expand Down Expand Up @@ -127,14 +129,14 @@ class _TilePlan(FrozenModel):
Overlap between tiles in percent. If a single value is provided, it is
used for both x and y. If a tuple is provided, the first value is used
for x and the second for y.
order_mode : OrderMode
mode : OrderMode
Define the ways of ordering the grid positions. Options are
row_wise, column_wise, row_wise_snake, column_wise_snake and spiral.
By default, row_wise_snake.
"""

overlap: Tuple[float, float] = (0.0, 0.0)
order_mode: OrderMode = OrderMode.row_wise_snake
mode: OrderMode = OrderMode.row_wise_snake

@validator("overlap", pre=True)
def _validate_overlap(cls, v: Any) -> Tuple[float, float]:
Expand Down Expand Up @@ -171,7 +173,7 @@ def iter_tiles(self, fov_width: float, fov_height: float) -> Iterator[TilePositi
cols = self._ncolumns(dy)
x0 = self._offset_x(dx)
y0 = self._offset_y(dy)
for r, c in _INDEX_GENERATORS[self.order_mode](rows, cols):
for r, c in _INDEX_GENERATORS[self.mode](rows, cols):
yield TilePosition(x0 + c * dx, y0 - r * dy, r, c, self.is_relative)

def __len__(self) -> int:
Expand Down
6 changes: 3 additions & 3 deletions tests/fixtures/mda.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
{
"name": null,
"tile_plan": {
"order_mode": "row_wise_snake",
"mode": "row_wise_snake",
"overlap": [
0.0,
0.0
Expand All @@ -52,7 +52,7 @@
{
"name": "test_name",
"tile_plan": {
"order_mode": "row_wise_snake",
"mode": "row_wise_snake",
"overlap": [
0.0,
0.0
Expand All @@ -71,7 +71,7 @@
],
"tile_plan": {
"columns": 1,
"order_mode": "row_wise_snake",
"mode": "row_wise_snake",
"overlap": [
0.0,
0.0
Expand Down
17 changes: 7 additions & 10 deletions tests/test_tile.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
from typing import List, Tuple, Union

import pytest

from useq import TileFromCorners, TileRelative
from useq._tile import _rect_indices, _spiral_indices, OrderMode, RelativeTo

from useq import TileRelative
from useq._tile import OrderMode, _rect_indices, _spiral_indices

EXPECT = {
(True, False): [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)],
Expand Down Expand Up @@ -42,19 +39,19 @@ def test_spiral_indices() -> None:

def test_position_equality():
"""Order of tiles should only change the order in which they are yielded"""
t1 = TileRelative(rows=3, columns=3, order_mode=OrderMode.spiral)
t1 = TileRelative(rows=3, columns=3, mode=OrderMode.spiral)
spiral_pos = set(t1.iter_tiles(1, 1))

t2 = TileRelative(rows=3, columns=3, order_mode=OrderMode.row_wise)
t2 = TileRelative(rows=3, columns=3, mode=OrderMode.row_wise)
row_pos = set(t2.iter_tiles(1, 1))

t3 = TileRelative(rows=3, columns=3, order_mode="row_wise_snake")
t3 = TileRelative(rows=3, columns=3, mode="row_wise_snake")
snake_row_pos = set(t3.iter_tiles(1, 1))

t4 = TileRelative(rows=3, columns=3, order_mode=OrderMode.column_wise)
t4 = TileRelative(rows=3, columns=3, mode=OrderMode.column_wise)
col_pos = set(t4.iter_tiles(1, 1))

t5 = TileRelative(rows=3, columns=3, order_mode=OrderMode.column_wise_snake)
t5 = TileRelative(rows=3, columns=3, mode=OrderMode.column_wise_snake)
snake_col_pos = set(t5.iter_tiles(1, 1))

assert spiral_pos == row_pos == snake_row_pos == col_pos == snake_col_pos

0 comments on commit a053fad

Please sign in to comment.