Skip to content

Commit b065e2f

Browse files
authored
Merge pull request #725 from mrava87/doc-literal
Doc: use Literal type hint
2 parents 174105c + 1f1ef8d commit b065e2f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+475
-363
lines changed

pylops/avo/avo.py

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,13 @@
1212
from typing import List, Optional, Tuple, Union
1313

1414
import numpy as np
15-
import numpy.typing as npt
1615
from numpy import cos, sin, tan
1716

1817
from pylops import LinearOperator
1918
from pylops.utils._internal import _value_or_sized_to_tuple
2019
from pylops.utils.backend import get_array_module
2120
from pylops.utils.decorators import reshaped
22-
from pylops.utils.typing import DTypeLike, NDArray
21+
from pylops.utils.typing import DTypeLike, NDArray, Tavolinearization
2322

2423

2524
def zoeppritz_scattering(
@@ -29,7 +28,7 @@ def zoeppritz_scattering(
2928
vp0: float,
3029
vs0: float,
3130
rho0: float,
32-
theta1: Union[float, npt.ArrayLike],
31+
theta1: Union[float, NDArray],
3332
) -> NDArray:
3433
r"""Zoeppritz solution.
3534
@@ -250,12 +249,12 @@ def zoeppritz_pp(
250249

251250

252251
def approx_zoeppritz_pp(
253-
vp1: Union[List, Tuple, npt.ArrayLike],
254-
vs1: Union[List, Tuple, npt.ArrayLike],
255-
rho1: Union[List, Tuple, npt.ArrayLike],
256-
vp0: Union[List, Tuple, npt.ArrayLike],
257-
vs0: Union[List, Tuple, npt.ArrayLike],
258-
rho0: Union[List, Tuple, npt.ArrayLike],
252+
vp1: Union[List, Tuple, NDArray],
253+
vs1: Union[List, Tuple, NDArray],
254+
rho1: Union[List, Tuple, NDArray],
255+
vp0: Union[List, Tuple, NDArray],
256+
vs0: Union[List, Tuple, NDArray],
257+
rho0: Union[List, Tuple, NDArray],
259258
theta1: Union[float, NDArray],
260259
) -> NDArray:
261260
"""PP reflection coefficient from the approximate Zoeppritz equation.
@@ -335,7 +334,7 @@ def approx_zoeppritz_pp(
335334

336335

337336
def akirichards(
338-
theta: npt.ArrayLike,
337+
theta: NDArray,
339338
vsvp: Union[float, NDArray],
340339
n: int = 1,
341340
) -> Tuple[NDArray, NDArray, NDArray]:
@@ -409,7 +408,7 @@ def akirichards(
409408

410409

411410
def fatti(
412-
theta: npt.ArrayLike,
411+
theta: NDArray,
413412
vsvp: Union[float, NDArray],
414413
n: int = 1,
415414
) -> Tuple[NDArray, NDArray, NDArray]:
@@ -485,7 +484,7 @@ def fatti(
485484

486485

487486
def ps(
488-
theta: npt.ArrayLike,
487+
theta: NDArray,
489488
vsvp: Union[float, NDArray],
490489
n: int = 1,
491490
) -> Tuple[NDArray, NDArray, NDArray]:
@@ -650,7 +649,7 @@ def __init__(
650649
vsvp: Union[float, NDArray] = 0.5,
651650
nt0: int = 1,
652651
spatdims: Optional[Union[int, Tuple[int]]] = None,
653-
linearization: str = "akirich",
652+
linearization: Tavolinearization = "akirich",
654653
dtype: DTypeLike = "float64",
655654
name: str = "A",
656655
) -> None:

pylops/avo/poststack.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@
33
"PoststackInversion",
44
]
55

6-
from typing import Optional, Tuple, Union
6+
from typing import Literal, Optional, Tuple, Union
77

88
import numpy as np
9-
import numpy.typing as npt
109
from scipy.sparse.linalg import lsqr
1110

1211
from pylops import (
@@ -136,12 +135,12 @@ def _PoststackLinearModelling(
136135

137136

138137
def PoststackLinearModelling(
139-
wav: npt.ArrayLike,
138+
wav: NDArray,
140139
nt0: int,
141140
spatdims: Optional[Union[int, ShapeLike]] = None,
142141
explicit: bool = False,
143142
sparse: bool = False,
144-
kind: str = "centered",
143+
kind: Literal["centered", "forward"] = "centered",
145144
name: Optional[str] = None,
146145
) -> LinearOperator:
147146
r"""Post-stack linearized seismic modelling operator.
@@ -173,7 +172,7 @@ def PoststackLinearModelling(
173172
Create a sparse matrix (``True``) or dense (``False``) when
174173
``explicit=True``
175174
kind : :obj:`str`, optional
176-
Derivative kind (``forward`` or ``centered``).
175+
Derivative kind (``centered`` or ``forward``).
177176
name : :obj:`str`, optional
178177
.. versionadded:: 2.0.0
179178
@@ -224,7 +223,7 @@ def PoststackLinearModelling(
224223

225224
def PoststackInversion(
226225
data: NDArray,
227-
wav: npt.ArrayLike,
226+
wav: NDArray,
228227
m0: Optional[NDArray] = None,
229228
explicit: bool = False,
230229
simultaneous: bool = False,

pylops/avo/prestack.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"PrestackInversion",
55
]
66

7-
from typing import Optional, Tuple, Union
7+
from typing import Callable, List, Literal, Optional, Tuple, Union
88

99
import numpy as np
1010
from scipy.sparse.linalg import lsqr
@@ -33,7 +33,7 @@
3333
inplace_set,
3434
)
3535
from pylops.utils.signalprocessing import convmtx
36-
from pylops.utils.typing import NDArray, ShapeLike
36+
from pylops.utils.typing import NDArray, ShapeLike, Tavolinearization
3737

3838
_linearizations = {"akirich": 3, "fatti": 3, "ps": 3}
3939

@@ -44,9 +44,9 @@ def PrestackLinearModelling(
4444
vsvp: Union[float, NDArray] = 0.5,
4545
nt0: int = 1,
4646
spatdims: Optional[Union[int, ShapeLike]] = None,
47-
linearization: str = "akirich",
47+
linearization: Tavolinearization = "akirich",
4848
explicit: bool = False,
49-
kind: str = "centered",
49+
kind: Literal["centered", "forward"] = "centered",
5050
name: Optional[str] = None,
5151
) -> LinearOperator:
5252
r"""Pre-stack linearized seismic modelling operator.
@@ -90,7 +90,7 @@ def PrestackLinearModelling(
9090
or a ``MatrixMult`` linear operator with dense matrix
9191
(``True``, preferred for small data)
9292
kind : :obj:`str`, optional
93-
Derivative kind (``forward`` or ``centered``).
93+
Derivative kind (``centered`` or ``forward``).
9494
name : :obj:`str`, optional
9595
.. versionadded:: 2.0.0
9696
@@ -228,7 +228,7 @@ def PrestackWaveletModelling(
228228
nwav: int,
229229
wavc: Optional[int] = None,
230230
vsvp: Union[float, NDArray] = 0.5,
231-
linearization: str = "akirich",
231+
linearization: Union[Tavolinearization, Callable] = "akirich",
232232
name: Optional[str] = None,
233233
) -> LinearOperator:
234234
r"""Pre-stack linearized seismic modelling operator for wavelet.
@@ -357,15 +357,15 @@ def PrestackInversion(
357357
theta: NDArray,
358358
wav: NDArray,
359359
m0: Optional[NDArray] = None,
360-
linearization: str = "akirich",
360+
linearization: Union[Tavolinearization, List[Tavolinearization]] = "akirich",
361361
explicit: bool = False,
362362
simultaneous: bool = False,
363363
epsI: Optional[float] = None,
364364
epsR: Optional[float] = None,
365365
dottest: bool = False,
366366
returnres: bool = False,
367367
epsRL1: Optional[float] = None,
368-
kind: str = "centered",
368+
kind: Literal["centered", "forward"] = "centered",
369369
vsvp: Union[float, NDArray] = 0.5,
370370
**kwargs_solver
371371
) -> Union[NDArray, Tuple[NDArray, NDArray]]:
@@ -421,7 +421,7 @@ def PrestackInversion(
421421
epsRL1 : :obj:`float`, optional
422422
Damping factor for additional blockiness regularization term
423423
kind : :obj:`str`, optional
424-
Derivative kind (``forward`` or ``centered``).
424+
Derivative kind (``centered`` or ``forward``).
425425
vsvp : :obj:`float` or :obj:`numpy.ndarray`
426426
:math:`V_S/V_P` ratio (constant or time/depth variant)
427427
**kwargs_solver

pylops/basicoperators/block.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from pylops import LinearOperator
66
from pylops.basicoperators import HStack, VStack
7-
from pylops.utils.typing import DTypeLike, NDArray
7+
from pylops.utils.typing import DTypeLike, NDArray, Tparallel_kind
88

99

1010
class _Block(LinearOperator):
@@ -17,7 +17,7 @@ class _Block(LinearOperator):
1717
def __init__(
1818
self,
1919
ops: Iterable[Iterable[LinearOperator]],
20-
forceflat: bool = None,
20+
forceflat: Optional[bool] = None,
2121
dtype: Optional[DTypeLike] = None,
2222
_HStack=HStack,
2323
_VStack=VStack,
@@ -153,8 +153,8 @@ def __init__(
153153
self,
154154
ops: Iterable[Iterable[LinearOperator]],
155155
nproc: int = 1,
156-
forceflat: bool = None,
157-
parallel_kind: str = "multiproc",
156+
forceflat: Optional[bool] = None,
157+
parallel_kind: Tparallel_kind = "multiproc",
158158
dtype: Optional[DTypeLike] = None,
159159
):
160160
super().__init__(

pylops/basicoperators/blockdiag.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
from pylops import LinearOperator
2424
from pylops.basicoperators import MatrixMult
2525
from pylops.utils.backend import get_array_module, get_module, inplace_set
26-
from pylops.utils.typing import DTypeLike, NDArray
26+
from pylops.utils.typing import DTypeLike, NDArray, Tinoutengine, Tparallel_kind
2727

2828

2929
def _matvec_rmatvec_map(op, x: NDArray) -> NDArray:
@@ -142,9 +142,9 @@ def __init__(
142142
self,
143143
ops: Sequence[LinearOperator],
144144
nproc: int = 1,
145-
forceflat: bool = None,
146-
inoutengine: Optional[tuple] = None,
147-
parallel_kind: str = "multiproc",
145+
forceflat: Optional[bool] = None,
146+
inoutengine: Optional[Tinoutengine] = None,
147+
parallel_kind: Tparallel_kind = "multiproc",
148148
dtype: Optional[DTypeLike] = None,
149149
) -> None:
150150
if parallel_kind not in ["multiproc", "multithread"]:

pylops/basicoperators/causalintegration.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
__all__ = ["CausalIntegration"]
22

3-
from typing import Union
3+
from typing import Literal, Union
44

55
import numpy as np
66

@@ -100,8 +100,8 @@ def __init__(
100100
self,
101101
dims: Union[int, InputDimsLike],
102102
axis: int = -1,
103-
sampling: float = 1,
104-
kind: str = "full",
103+
sampling: float = 1.0,
104+
kind: Literal["full", "half", "trapezoidal"] = "full",
105105
removefirst: bool = False,
106106
dtype: DTypeLike = "float64",
107107
name: str = "C",

pylops/basicoperators/directionalderivative.py

Lines changed: 35 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
"SecondDirectionalDerivative",
44
]
55

6+
from typing import Union
7+
68
from pylops import LinearOperator
79
from pylops.basicoperators import Diagonal, Gradient, Sum
8-
from pylops.utils.typing import DTypeLike, InputDimsLike, NDArray
10+
from pylops.utils.typing import DTypeLike, InputDimsLike, NDArray, Tderivkind
911

1012

1113
class FirstDirectionalDerivative(LinearOperator):
@@ -25,8 +27,9 @@ class FirstDirectionalDerivative(LinearOperator):
2527
v : :obj:`numpy.ndarray`, optional
2628
Single direction (array of size :math:`n_\text{dims}`) or group of directions
2729
(array of size :math:`[n_\text{dims} \times n_{d_0} \times ... \times n_{d_{n_\text{dims}}}]`)
28-
sampling : :obj:`tuple`, optional
29-
Sampling steps for each direction.
30+
sampling : :obj:`tuple` or :obj:`float`, optional
31+
Sampling steps for each direction. If a single float
32+
is provided, it is used for all directions.
3033
edge : :obj:`bool`, optional
3134
Use reduced order derivative at edges (``True``) or
3235
ignore them (``False``).
@@ -77,9 +80,9 @@ def __init__(
7780
self,
7881
dims: InputDimsLike,
7982
v: NDArray,
80-
sampling: int = 1,
83+
sampling: Union[float, InputDimsLike] = 1.0,
8184
edge: bool = False,
82-
kind: str = "centered",
85+
kind: Tderivkind = "centered",
8386
dtype: DTypeLike = "float64",
8487
name: str = "F",
8588
):
@@ -88,7 +91,12 @@ def __init__(
8891
self.kind = kind
8992
self.v = v
9093
Op = self._calc_first_ddop(
91-
dims=dims, sampling=sampling, edge=edge, kind=kind, dtype=dtype, v=v
94+
dims=dims,
95+
v=v,
96+
sampling=sampling,
97+
edge=edge,
98+
kind=kind,
99+
dtype=dtype,
92100
)
93101
super().__init__(Op=Op, name=name)
94102

@@ -102,9 +110,9 @@ def _rmatvec(self, x: NDArray) -> NDArray:
102110
def _calc_first_ddop(
103111
dims: InputDimsLike,
104112
v: NDArray,
105-
sampling: int,
113+
sampling: Union[float, InputDimsLike],
106114
edge: bool,
107-
kind: str,
115+
kind: Tderivkind,
108116
dtype: DTypeLike,
109117
):
110118
Gop = Gradient(dims, sampling=sampling, edge=edge, kind=kind, dtype=dtype)
@@ -133,11 +141,16 @@ class SecondDirectionalDerivative(LinearOperator):
133141
v : :obj:`numpy.ndarray`, optional
134142
Single direction (array of size :math:`n_\text{dims}`) or group of directions
135143
(array of size :math:`[n_\text{dims} \times n_{d_0} \times ... \times n_{d_{n_\text{dims}}}]`)
136-
sampling : :obj:`tuple`, optional
137-
Sampling steps for each direction.
144+
sampling : :obj:`tuple` or :obj:`float`, optional
145+
Sampling steps for each direction. If a single float
146+
is provided, it is used for all directions.
138147
edge : :obj:`bool`, optional
139148
Use reduced order derivative at edges (``True``) or
140149
ignore them (``False``).
150+
kind : :obj:`str`, optional
151+
.. versionadded:: 2.7.0
152+
153+
Derivative kind (``forward``, ``centered``, or ``backward``).
141154
dtype : :obj:`str`, optional
142155
Type of elements in input array.
143156
@@ -175,17 +188,18 @@ def __init__(
175188
self,
176189
dims: InputDimsLike,
177190
v: NDArray,
178-
sampling: int = 1,
191+
sampling: Union[float, InputDimsLike] = 1.0,
179192
edge: bool = False,
193+
kind: Tderivkind = "centered",
180194
dtype: DTypeLike = "float64",
181195
name: str = "S",
182196
):
183-
self.dims = dims
184-
self.v = v
185197
self.sampling = sampling
186198
self.edge = edge
199+
self.kind = kind
200+
self.v = v
187201
Op = self._calc_second_ddop(
188-
dims=dims, v=v, sampling=sampling, edge=edge, dtype=dtype
202+
dims=dims, v=v, sampling=sampling, edge=edge, kind=kind, dtype=dtype
189203
)
190204
super().__init__(Op=Op, name=name)
191205

@@ -197,10 +211,15 @@ def _rmatvec(self, x: NDArray) -> NDArray:
197211

198212
@staticmethod
199213
def _calc_second_ddop(
200-
dims: InputDimsLike, v: NDArray, sampling: int, edge: bool, dtype: DTypeLike
214+
dims: InputDimsLike,
215+
v: NDArray,
216+
sampling: int,
217+
edge: bool,
218+
kind: Tderivkind,
219+
dtype: DTypeLike,
201220
):
202221
Dop = FirstDirectionalDerivative(
203-
dims=dims, v=v, sampling=sampling, edge=edge, dtype=dtype
222+
dims=dims, v=v, sampling=sampling, edge=edge, kind=kind, dtype=dtype
204223
)
205224
ddop = -Dop.H * Dop
206225
return ddop

0 commit comments

Comments
 (0)