Skip to content

Commit 226a847

Browse files
committed
docs: improve kernel docs
1 parent dc3a26f commit 226a847

2 files changed

Lines changed: 136 additions & 8 deletions

File tree

doc/conf.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22
from urllib.request import urlopen
33

44

5-
_conf_url = \
6-
"https://raw.githubusercontent.com/inducer/sphinxconfig/main/sphinxconfig.py"
5+
_conf_url = "https://raw.githubusercontent.com/inducer/sphinxconfig/main/sphinxconfig.py"
76
with urlopen(_conf_url) as _inf:
87
exec(compile(_inf.read(), _conf_url, "exec"), globals())
98

@@ -30,9 +29,13 @@
3029
]
3130

3231
sphinxconfig_missing_reference_aliases = {
32+
# sympy
33+
"sp.Matrix": "class:sympy.matrices.dense.DenseMatrix",
3334
# pymbolic
34-
"Expression": "obj:pymbolic.typing.Expression",
3535
"ArithmeticExpression": "obj:pymbolic.ArithmeticExpression",
36+
"Expression": "obj:pymbolic.typing.Expression",
37+
# sumpy
38+
"ArithmeticExpr": "obj:sumpy.kernel.ArithmeticExpr",
3639
}
3740

3841

sumpy/kernel.py

Lines changed: 130 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,25 +69,46 @@
6969
Kernel interface
7070
----------------
7171
72-
.. autoclass:: Kernel
72+
.. autoclass:: ArithmeticExpr
73+
7374
.. autoclass:: KernelArgument
75+
.. autoclass:: Kernel
76+
:show-inheritance:
7477
7578
Symbolic kernels
7679
----------------
7780
7881
.. autoclass:: ExpressionKernel
82+
:show-inheritance:
83+
:members: mapper_method
7984
8085
PDE kernels
8186
-----------
8287
8388
.. autoclass:: LaplaceKernel
89+
:show-inheritance:
90+
:members: mapper_method
8491
.. autoclass:: BiharmonicKernel
92+
:show-inheritance:
93+
:members: mapper_method
8594
.. autoclass:: HelmholtzKernel
95+
:show-inheritance:
96+
:members: mapper_method
8697
.. autoclass:: YukawaKernel
98+
:show-inheritance:
99+
:members: mapper_method
87100
.. autoclass:: StokesletKernel
101+
:show-inheritance:
102+
:members: mapper_method
88103
.. autoclass:: StressletKernel
104+
:show-inheritance:
105+
:members: mapper_method
89106
.. autoclass:: ElasticityKernel
107+
:show-inheritance:
108+
:members: mapper_method
90109
.. autoclass:: LineOfCompressionKernel
110+
:show-inheritance:
111+
:members: mapper_method
91112
92113
Derivatives
93114
-----------
@@ -97,22 +118,50 @@
97118
98119
.. autoclass:: DerivativeBase
99120
.. autoclass:: AxisTargetDerivative
121+
:show-inheritance:
122+
:undoc-members:
123+
:members: mapper_method,target_array_name
100124
.. autoclass:: AxisSourceDerivative
125+
:show-inheritance:
126+
:members: mapper_method
127+
.. autoclass:: DirectionalDerivative
128+
:show-inheritance:
129+
:members: directional_kind
101130
.. autoclass:: DirectionalSourceDerivative
131+
:show-inheritance:
132+
:members: mapper_method,directional_kind
102133
.. autoclass:: DirectionalTargetDerivative
134+
:show-inheritance:
135+
:undoc-members:
136+
:members: mapper_method,directional_kind,target_array_name
103137
104138
Transforming kernels
105139
--------------------
106140
141+
.. autoclass:: TargetPointMultiplier
142+
:undoc-members:
143+
:members: mapper_method,target_array_name
144+
145+
.. autoclass:: ResultT
146+
107147
.. autoclass:: KernelMapper
148+
:show-inheritance:
108149
.. autoclass:: KernelCombineMapper
150+
:show-inheritance:
109151
.. autoclass:: KernelIdentityMapper
152+
:show-inheritance:
110153
.. autoclass:: AxisSourceDerivativeRemover
154+
:show-inheritance:
111155
.. autoclass:: AxisTargetDerivativeRemover
156+
:show-inheritance:
112157
.. autoclass:: SourceDerivativeRemover
158+
:show-inheritance:
113159
.. autoclass:: TargetDerivativeRemover
114-
.. autoclass:: TargetPointMultiplier
160+
:show-inheritance:
161+
.. autoclass:: TargetTransformationRemover
162+
:show-inheritance:
115163
.. autoclass:: DerivativeCounter
164+
:show-inheritance:
116165
"""
117166

118167
ArithmeticExpr: TypeAlias = int | float | complex | sym.Basic
@@ -145,7 +194,7 @@ class Kernel(ABC):
145194
.. autoattribute:: is_translation_invariant
146195
147196
.. autoattribute:: dim
148-
.. autoattribute:: is_complex_valued
197+
.. autoproperty:: is_complex_valued
149198
150199
.. automethod:: get_base_kernel
151200
.. automethod:: replace_base_kernel
@@ -517,6 +566,11 @@ def get_pde_as_diff_op(self) -> LinearPDESystemOperator:
517566

518567
@dataclass(frozen=True)
519568
class HelmholtzKernel(ExpressionKernel):
569+
"""
570+
.. autoattribute:: helmholtz_k_name
571+
.. autoattribute:: allow_evanescent
572+
"""
573+
520574
mapper_method: ClassVar[str] = "map_helmholtz_kernel"
521575

522576
helmholtz_k_name: str
@@ -593,6 +647,10 @@ def get_pde_as_diff_op(self) -> LinearPDESystemOperator:
593647

594648
@dataclass(frozen=True)
595649
class YukawaKernel(ExpressionKernel):
650+
"""
651+
.. autoattribute:: yukawa_lambda_name
652+
"""
653+
596654
mapper_method: ClassVar[str] = "map_yukawa_kernel"
597655

598656
yukawa_lambda_name: str
@@ -676,6 +734,12 @@ def get_pde_as_diff_op(self) -> LinearPDESystemOperator:
676734

677735
@dataclass(frozen=True)
678736
class ElasticityKernel(ExpressionKernel):
737+
"""
738+
.. autoattribute:: icomp
739+
.. autoattribute:: jcomp
740+
.. autoattribute:: viscosity_mu
741+
.. autoattribute:: poisson_ratio
742+
"""
679743
mapper_method: ClassVar[str] = "map_elasticity_kernel"
680744

681745
icomp: int
@@ -799,6 +863,12 @@ def get_pde_as_diff_op(self) -> LinearPDESystemOperator:
799863

800864
@dataclass(frozen=True)
801865
class StokesletKernel(ElasticityKernel):
866+
"""
867+
.. autoattribute:: icomp
868+
.. autoattribute:: jcomp
869+
.. autoattribute:: viscosity_mu
870+
"""
871+
802872
def __new__(cls,
803873
dim: int,
804874
icomp: int,
@@ -833,6 +903,12 @@ def __str__(self) -> str:
833903

834904
@dataclass(frozen=True)
835905
class StressletKernel(ExpressionKernel):
906+
"""
907+
.. autoattribute:: icomp
908+
.. autoattribute:: jcomp
909+
.. autoattribute:: kcomp
910+
.. autoattribute:: viscosity_mu
911+
"""
836912
mapper_method: ClassVar[str] = "map_stresslet_kernel"
837913

838914
icomp: int
@@ -920,6 +996,10 @@ class LineOfCompressionKernel(ExpressionKernel):
920996
*Force at a Point in the Interior of a Semi-Infinite Solid*.
921997
Physics. 7 (5): 195-202.
922998
`doi:10.1063/1.1745385 <https://doi.org/10.1063/1.1745385>`__.
999+
1000+
.. autoattribute:: axis
1001+
.. autoattribute:: viscosity_mu
1002+
.. autoattribute:: poisson_ratio
9231003
"""
9241004

9251005
mapper_method: ClassVar[str] = "map_line_of_compression_kernel"
@@ -1003,6 +1083,7 @@ def get_pde_as_diff_op(self) -> LinearPDESystemOperator:
10031083
@dataclass(frozen=True)
10041084
class KernelWrapper(Kernel, ABC):
10051085
inner_kernel: Kernel
1086+
"""The kernel that is being wrapped (to take a derivative of, etc.)."""
10061087

10071088
def __init__(self, inner_kernel: Kernel) -> None:
10081089
Kernel.__init__(self, inner_kernel.dim)
@@ -1083,6 +1164,12 @@ def get_derivative_taker(
10831164
# {{{ derivatives
10841165

10851166
class DerivativeBase(KernelWrapper, ABC):
1167+
"""Bases: :class:`Kernel`
1168+
1169+
.. autoattribute:: inner_kernel
1170+
.. automethod:: replace_inner_kernel
1171+
"""
1172+
10861173
@override
10871174
def get_pde_as_diff_op(self) -> LinearPDESystemOperator:
10881175
return self.inner_kernel.get_pde_as_diff_op()
@@ -1098,9 +1185,14 @@ def replace_inner_kernel(self, new_inner_kernel: Kernel) -> Kernel:
10981185

10991186
@dataclass(frozen=True)
11001187
class AxisSourceDerivative(DerivativeBase):
1188+
"""
1189+
.. autoattribute:: axis
1190+
"""
1191+
11011192
mapper_method: ClassVar[str] = "map_axis_source_derivative"
11021193

11031194
axis: int
1195+
"""Direction axis for the source derivative."""
11041196

11051197
def __init__(self, axis: int, inner_kernel: Kernel) -> None:
11061198
super().__init__(inner_kernel)
@@ -1135,6 +1227,10 @@ def replace_inner_kernel(self, new_inner_kernel: Kernel) -> Kernel:
11351227

11361228
@dataclass(frozen=True)
11371229
class AxisTargetDerivative(DerivativeBase):
1230+
"""
1231+
.. autoattribute:: axis
1232+
"""
1233+
11381234
mapper_method: ClassVar[str] = "map_axis_target_derivative"
11391235
target_array_name: ClassVar[str] = "targets"
11401236

@@ -1222,8 +1318,14 @@ def map_common_subexpression_uncached(self,
12221318

12231319
@dataclass(frozen=True)
12241320
class DirectionalDerivative(DerivativeBase):
1321+
"""
1322+
.. autoattribute:: dir_vec_name
1323+
"""
12251324
directional_kind: ClassVar[Literal["src", "tgt"]]
1325+
"""The kind of this directional derivative (can only be a source or target)."""
1326+
12261327
dir_vec_name: str
1328+
"""Name of the vector used for the direction."""
12271329

12281330
def __init__(self, inner_kernel: Kernel, dir_vec_name: str | None = None) -> None:
12291331
if dir_vec_name is None:
@@ -1250,7 +1352,6 @@ def replace_inner_kernel(self, new_inner_kernel: Kernel) -> Kernel:
12501352

12511353
class DirectionalTargetDerivative(DirectionalDerivative):
12521354
mapper_method: ClassVar[str] = "map_directional_target_derivative"
1253-
12541355
directional_kind: ClassVar[Literal["src", "tgt"]] = "tgt"
12551356
target_array_name: ClassVar[str] = "targets"
12561357

@@ -1384,14 +1485,19 @@ def prepare_loopy_kernel(self, loopy_knl: lp.TranslationUnit) -> lp.TranslationU
13841485

13851486

13861487
class TargetPointMultiplier(KernelWrapper):
1387-
"""Wraps a kernel :math:`G(x, y)` and outputs :math:`x_j G(x, y)`
1488+
"""Bases: :class:`Kernel`
1489+
1490+
Wraps a kernel :math:`G(x, y)` and outputs :math:`x_j G(x, y)`
13881491
where :math:`x, y` are targets and sources respectively.
1492+
1493+
.. autoattribute:: axis
13891494
"""
13901495

13911496
mapper_method: ClassVar[str] = "map_target_point_multiplier"
13921497
target_array_name: ClassVar[str] = "targets"
13931498

13941499
axis: int
1500+
"""Coordinate axis with which to multiply the kernel."""
13951501

13961502
def __init__(self, axis: int, inner_kernel: Kernel) -> None:
13971503
KernelWrapper.__init__(self, inner_kernel)
@@ -1466,6 +1572,9 @@ def replace_inner_kernel(self, new_inner_kernel: Kernel) -> Kernel:
14661572

14671573

14681574
class KernelMapper(Generic[ResultT]):
1575+
"""
1576+
.. automethod:: __call__
1577+
"""
14691578
def rec(self, kernel: Kernel) -> ResultT:
14701579
try:
14711580
method = cast(
@@ -1481,6 +1590,10 @@ def __call__(self, kernel: Kernel) -> ResultT:
14811590

14821591

14831592
class KernelCombineMapper(KernelMapper[ResultT], ABC):
1593+
"""
1594+
.. automethod:: combine
1595+
"""
1596+
14841597
@abstractmethod
14851598
def combine(self, values: Iterable[ResultT]) -> ResultT:
14861599
raise NotImplementedError
@@ -1539,32 +1652,42 @@ def map_directional_source_derivative(
15391652

15401653

15411654
class AxisSourceDerivativeRemover(KernelIdentityMapper):
1655+
"""Removes all axis source derivatives from the kernel."""
1656+
15421657
@override
15431658
def map_axis_source_derivative(self, kernel: AxisSourceDerivative) -> Kernel:
15441659
return self.rec(kernel.inner_kernel)
15451660

15461661

15471662
class AxisTargetDerivativeRemover(KernelIdentityMapper):
1663+
"""Removes all axis target derivatives from the kernel."""
1664+
15481665
@override
15491666
def map_axis_target_derivative(self, kernel: AxisTargetDerivative) -> Kernel:
15501667
return self.rec(kernel.inner_kernel)
15511668

15521669

15531670
class TargetDerivativeRemover(AxisTargetDerivativeRemover):
1671+
"""Removes all target derivatives from the kernel."""
1672+
15541673
@override
15551674
def map_directional_target_derivative(
15561675
self, kernel: DirectionalTargetDerivative) -> Kernel:
15571676
return self.rec(kernel.inner_kernel)
15581677

15591678

15601679
class SourceDerivativeRemover(AxisSourceDerivativeRemover):
1680+
"""Removes all source derivatives from the kernel."""
1681+
15611682
@override
15621683
def map_directional_source_derivative(
15631684
self, kernel: DirectionalSourceDerivative) -> Kernel:
15641685
return self.rec(kernel.inner_kernel)
15651686

15661687

15671688
class TargetTransformationRemover(TargetDerivativeRemover):
1689+
"""Removes all target transformations from the kernel."""
1690+
15681691
@override
15691692
def map_target_point_multiplier(self, kernel: TargetPointMultiplier) -> Kernel:
15701693
return self.rec(kernel.inner_kernel)
@@ -1574,6 +1697,8 @@ def map_target_point_multiplier(self, kernel: TargetPointMultiplier) -> Kernel:
15741697

15751698

15761699
class DerivativeCounter(KernelCombineMapper[int]):
1700+
"""Counts the number of derivatives in the kernel."""
1701+
15771702
@override
15781703
def combine(self, values: Iterable[int]) -> int:
15791704
return sum(values)

0 commit comments

Comments
 (0)