Skip to content

Commit fcfda4f

Browse files
authored
🏷️ integrate: stub integrate._rules.* (private api) (#715)
2 parents e0670a1 + 99b3cfd commit fcfda4f

File tree

5 files changed

+126
-0
lines changed

5 files changed

+126
-0
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from ._base import FixedRule, NestedFixedRule, ProductNestedFixed, Rule
2+
from ._gauss_kronrod import GaussKronrodQuadrature
3+
from ._gauss_legendre import GaussLegendreQuadrature
4+
from ._genz_malik import GenzMalikCubature
5+
6+
__all__ = [
7+
"FixedRule",
8+
"GaussKronrodQuadrature",
9+
"GaussLegendreQuadrature",
10+
"GenzMalikCubature",
11+
"NestedFixedRule",
12+
"ProductNestedFixed",
13+
"Rule",
14+
]
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
from collections.abc import Callable, Generator, Iterable, Sequence
2+
from types import ModuleType
3+
from typing import Concatenate, Generic, TypeAlias
4+
from typing_extensions import TypeVar, override
5+
6+
import numpy as np
7+
import optype.numpy as onp
8+
import optype.numpy.compat as npc
9+
10+
_NumberT = TypeVar("_NumberT", bound=npc.number)
11+
_NumberT_co = TypeVar("_NumberT_co", bound=npc.number, default=np.float64, covariant=True)
12+
_XPT_co = TypeVar("_XPT_co", default=ModuleType, covariant=True)
13+
14+
_IntegrandFunc: TypeAlias = Callable[Concatenate[onp.Array2D[_NumberT], ...], onp.ArrayND[npc.number]]
15+
16+
###
17+
18+
class Rule(Generic[_XPT_co]): # undocumented
19+
xp: _XPT_co | None
20+
21+
def estimate(
22+
self, /, f: _IntegrandFunc[_NumberT], a: onp.ArrayND[_NumberT], b: onp.ArrayND[_NumberT], args: tuple[object, ...] = ()
23+
) -> onp.ArrayND[_NumberT]: ... # abstract
24+
def estimate_error(
25+
self, /, f: _IntegrandFunc[_NumberT], a: onp.ArrayND[_NumberT], b: onp.ArrayND[_NumberT], args: tuple[object, ...] = ()
26+
) -> onp.ArrayND[_NumberT]: ...
27+
28+
class FixedRule(Rule[_XPT_co], Generic[_XPT_co, _NumberT_co]): # undocumented
29+
def __init__(self) -> None: ...
30+
@property
31+
def nodes_and_weights(self) -> tuple[onp.ArrayND[_NumberT_co], onp.ArrayND[_NumberT_co]]: ... # abstract
32+
33+
class NestedFixedRule(FixedRule[_XPT_co, _NumberT_co], Generic[_XPT_co, _NumberT_co]): # undocumented
34+
higher: FixedRule[_XPT_co, _NumberT_co]
35+
lower: FixedRule[_XPT_co, _NumberT_co]
36+
@override
37+
def __init__(self, /, higher: FixedRule[_XPT_co, _NumberT_co], lower: FixedRule[_XPT_co, _NumberT_co]) -> None: ...
38+
@property
39+
def lower_nodes_and_weights(self) -> tuple[onp.ArrayND[_NumberT_co], onp.ArrayND[_NumberT_co]]: ... # semi-abstract
40+
41+
class ProductNestedFixed(NestedFixedRule[_XPT_co, _NumberT_co], Generic[_XPT_co, _NumberT_co]):
42+
base_rules: Sequence[NestedFixedRule[_XPT_co, _NumberT_co]]
43+
@override
44+
def __init__(self, /, base_rules: Sequence[NestedFixedRule[_XPT_co, _NumberT_co]]) -> None: ...
45+
46+
def _cartesian_product(arrays: Iterable[onp.ArrayND[_NumberT]]) -> onp.Array2D[_NumberT]: ... # undocumented
47+
def _split_subregion(
48+
a: onp.ArrayND[_NumberT], b: onp.ArrayND[_NumberT], xp: ModuleType, split_at: onp.ArrayND[_NumberT] | None = None
49+
) -> Generator[tuple[onp.ArrayND[_NumberT], onp.ArrayND[_NumberT]]]: ... # undocumented
50+
def _apply_fixed_rule(
51+
f: _IntegrandFunc[_NumberT],
52+
a: onp.ArrayND[_NumberT],
53+
b: onp.ArrayND[_NumberT],
54+
orig_nodes: onp.ArrayND[npc.number],
55+
orig_weights: onp.ArrayND[npc.number],
56+
args: tuple[object, ...],
57+
xp: ModuleType,
58+
) -> onp.ArrayND[_NumberT]: ... # undocumented
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from types import ModuleType
2+
from typing import Generic
3+
from typing_extensions import TypeVar
4+
5+
import numpy as np
6+
7+
from ._base import NestedFixedRule
8+
from ._gauss_legendre import GaussLegendreQuadrature
9+
10+
_XPT_co = TypeVar("_XPT_co", default=ModuleType, covariant=True)
11+
12+
###
13+
14+
class GaussKronrodQuadrature(NestedFixedRule[_XPT_co, np.float64], Generic[_XPT_co]): # undocumented
15+
npoints: int
16+
gauss: GaussLegendreQuadrature[_XPT_co]
17+
def __init__(self, /, npoints: int, xp: _XPT_co | None = None) -> None: ...
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from types import ModuleType
2+
from typing import Generic
3+
from typing_extensions import TypeVar
4+
5+
import numpy as np
6+
7+
from ._base import FixedRule as FixedRule
8+
from scipy.special import roots_legendre as roots_legendre
9+
10+
_XPT_co = TypeVar("_XPT_co", default=ModuleType, covariant=True)
11+
12+
###
13+
14+
class GaussLegendreQuadrature(FixedRule[_XPT_co, np.float64], Generic[_XPT_co]): # undocumented
15+
npoints: int
16+
def __init__(self, /, npoints: int, xp: _XPT_co | None = None) -> None: ...
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
from collections.abc import Generator, Iterable
2+
from types import ModuleType
3+
from typing import Generic
4+
from typing_extensions import TypeVar
5+
6+
import numpy as np
7+
8+
from ._base import NestedFixedRule
9+
10+
_T = TypeVar("_T")
11+
_XPT_co = TypeVar("_XPT_co", default=ModuleType, covariant=True)
12+
13+
###
14+
15+
class GenzMalikCubature(NestedFixedRule[_XPT_co, np.float64], Generic[_XPT_co]): # undocumented
16+
ndim: int
17+
degree: int
18+
lower_degree: int
19+
def __init__(self, /, ndim: int, degree: int = 7, lower_degree: int = 5, xp: _XPT_co | None = None) -> None: ...
20+
21+
def _distinct_permutations(iterable: Iterable[_T]) -> Generator[tuple[_T, ...]]: ... # undocumented

0 commit comments

Comments
 (0)