|
22 | 22 | partial_function_from_dataframe, |
23 | 23 | ) |
24 | 24 |
|
| 25 | +try: |
| 26 | + from typing import TypeAlias |
| 27 | +except ImportError: |
| 28 | + # Remove this when we drop support for Python 3.9 |
| 29 | + from typing_extensions import TypeAlias |
| 30 | + |
25 | 31 | try: |
26 | 32 | import pandas |
27 | 33 |
|
|
33 | 39 | # -- types -- |
34 | 40 |
|
35 | 41 | # Commonly used types |
36 | | -Interval = Union[Tuple[float, float], Tuple[float, float, int]] |
37 | | -NeighborsType = Dict[float, List[Union[float, None]]] |
| 42 | +Interval: TypeAlias = Union[Tuple[float, float], Tuple[float, float, int]] |
| 43 | +NeighborsType: TypeAlias = Dict[float, List[Union[float, None]]] |
38 | 44 |
|
39 | 45 | # Types for loss_per_interval functions |
40 | | -NoneFloat = Union[Float, None] |
41 | | -NoneArray = Union[np.ndarray, None] |
42 | | -XsType0 = Tuple[Float, Float] |
43 | | -YsType0 = Union[Tuple[Float, Float], Tuple[np.ndarray, np.ndarray]] |
44 | | -XsType1 = Tuple[NoneFloat, NoneFloat, NoneFloat, NoneFloat] |
45 | | -YsType1 = Union[ |
| 46 | +NoneFloat: TypeAlias = Union[Float, None] |
| 47 | +NoneArray: TypeAlias = Union[np.ndarray, None] |
| 48 | +XsType0: TypeAlias = Tuple[Float, Float] |
| 49 | +YsType0: TypeAlias = Union[Tuple[Float, Float], Tuple[np.ndarray, np.ndarray]] |
| 50 | +XsType1: TypeAlias = Tuple[NoneFloat, NoneFloat, NoneFloat, NoneFloat] |
| 51 | +YsType1: TypeAlias = Union[ |
46 | 52 | Tuple[NoneFloat, NoneFloat, NoneFloat, NoneFloat], |
47 | 53 | Tuple[NoneArray, NoneArray, NoneArray, NoneArray], |
48 | 54 | ] |
49 | | -XsTypeN = Tuple[NoneFloat, ...] |
50 | | -YsTypeN = Union[Tuple[NoneFloat, ...], Tuple[NoneArray, ...]] |
| 55 | +XsTypeN: TypeAlias = Tuple[NoneFloat, ...] |
| 56 | +YsTypeN: TypeAlias = Union[Tuple[NoneFloat, ...], Tuple[NoneArray, ...]] |
51 | 57 |
|
52 | 58 |
|
53 | 59 | __all__ = [ |
@@ -303,11 +309,15 @@ def __init__( |
303 | 309 | # The precision in 'x' below which we set losses to 0. |
304 | 310 | self._dx_eps = 2 * max(np.abs(bounds)) * np.finfo(float).eps |
305 | 311 |
|
306 | | - self.bounds = list(bounds) |
| 312 | + self.bounds = tuple(bounds) |
307 | 313 | self.__missing_bounds = set(self.bounds) # cache of missing bounds |
308 | 314 |
|
309 | 315 | self._vdim: int | None = None |
310 | 316 |
|
| 317 | + def new(self) -> Learner1D: |
| 318 | + """Create a copy of `~adaptive.Learner1D` without the data.""" |
| 319 | + return Learner1D(self.function, self.bounds, self.loss_per_interval) |
| 320 | + |
311 | 321 | @property |
312 | 322 | def vdim(self) -> int: |
313 | 323 | """Length of the output of ``learner.function``. |
|
0 commit comments