|
5 | 5 | import math |
6 | 6 | from collections.abc import Callable, Sequence |
7 | 7 | from copy import copy, deepcopy |
8 | | -from typing import TYPE_CHECKING, Any, TypeAlias |
| 8 | +from typing import Any, TypeAlias |
9 | 9 |
|
10 | 10 | import cloudpickle |
11 | 11 | import numpy as np |
|
31 | 31 | except ModuleNotFoundError: |
32 | 32 | with_pandas = False |
33 | 33 |
|
34 | | -if TYPE_CHECKING: |
35 | | - # -- types -- |
36 | 34 |
|
37 | | - # Commonly used types |
38 | | - Interval: TypeAlias = tuple[float, float] | tuple[float, float, int] |
39 | | - NeighborsType: TypeAlias = SortedDict[float, list[float | None]] |
| 35 | +# Commonly used types |
| 36 | +Interval: TypeAlias = tuple[float, float] | tuple[float, float, int] |
| 37 | +NeighborsType: TypeAlias = SortedDict[float, list[float | None]] |
40 | 38 |
|
41 | | - # Types for loss_per_interval functions |
42 | | - XsType0: TypeAlias = tuple[float, float] |
43 | | - YsType0: TypeAlias = tuple[float, float] | tuple[np.ndarray, np.ndarray] |
44 | | - XsType1: TypeAlias = tuple[float | None, float | None, float | None, float | None] |
45 | | - YsType1: TypeAlias = ( |
46 | | - tuple[float | None, float | None, float | None, float | None] |
47 | | - | tuple[ |
48 | | - np.ndarray | None, np.ndarray | None, np.ndarray | None, np.ndarray | None |
49 | | - ] |
50 | | - ) |
51 | | - XsTypeN: TypeAlias = tuple[float | None, ...] |
52 | | - YsTypeN: TypeAlias = tuple[float | None, ...] | tuple[np.ndarray | None, ...] |
| 39 | +# Types for loss_per_interval functions |
| 40 | +XsType0: TypeAlias = tuple[float, float] |
| 41 | +YsType0: TypeAlias = tuple[float, float] | tuple[np.ndarray, np.ndarray] |
| 42 | +XsType1: TypeAlias = tuple[float | None, float | None, float | None, float | None] |
| 43 | +YsType1: TypeAlias = ( |
| 44 | + tuple[float | None, float | None, float | None, float | None] |
| 45 | + | tuple[np.ndarray | None, np.ndarray | None, np.ndarray | None, np.ndarray | None] |
| 46 | +) |
| 47 | +XsTypeN: TypeAlias = tuple[float | None, ...] |
| 48 | +YsTypeN: TypeAlias = tuple[float | None, ...] | tuple[np.ndarray | None, ...] |
53 | 49 |
|
54 | 50 |
|
55 | 51 | __all__ = [ |
@@ -110,18 +106,18 @@ def abs_min_log_loss(xs: XsType0, ys: YsType0) -> Float: |
110 | 106 | @uses_nth_neighbors(1) |
111 | 107 | def triangle_loss(xs: XsType1, ys: YsType1) -> Float: |
112 | 108 | assert len(xs) == 4 |
113 | | - xs = [x for x in xs if x is not None] # type: ignore[assignment] |
114 | | - ys = [y for y in ys if y is not None] # type: ignore[assignment] |
| 109 | + x = [x for x in xs if x is not None] |
| 110 | + y = [y for y in ys if y is not None] |
115 | 111 |
|
116 | | - if len(xs) == 2: # we do not have enough points for a triangle |
117 | | - return xs[1] - xs[0] # type: ignore[operator] |
| 112 | + if len(x) == 2: # we do not have enough points for a triangle |
| 113 | + return x[1] - x[0] # type: ignore[operator] |
118 | 114 |
|
119 | | - N = len(xs) - 2 # number of constructed triangles |
120 | | - if isinstance(ys[0], collections.abc.Iterable): |
121 | | - pts = [(x, *y) for x, y in zip(xs, ys)] # type: ignore[misc] |
| 115 | + N = len(x) - 2 # number of constructed triangles |
| 116 | + if isinstance(y[0], collections.abc.Iterable): |
| 117 | + pts = [(x, *y) for x, y in zip(x, y)] # type: ignore[misc] |
122 | 118 | vol = simplex_volume_in_embedding |
123 | 119 | else: |
124 | | - pts = list(zip(xs, ys)) |
| 120 | + pts = list(zip(x, y)) |
125 | 121 | vol = volume |
126 | 122 | return sum(vol(pts[i : i + 3]) for i in range(N)) / N |
127 | 123 |
|
|
0 commit comments