Skip to content

Commit d79fee5

Browse files
committed
docs: improve kernel docs
1 parent 68514c5 commit d79fee5

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
@@ -516,6 +565,11 @@ def get_pde_as_diff_op(self) -> LinearPDESystemOperator:
516565

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

521575
helmholtz_k_name: str
@@ -592,6 +646,10 @@ def get_pde_as_diff_op(self) -> LinearPDESystemOperator:
592646

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

597655
yukawa_lambda_name: str
@@ -675,6 +733,12 @@ def get_pde_as_diff_op(self) -> LinearPDESystemOperator:
675733

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

680744
icomp: int
@@ -791,6 +855,12 @@ def get_pde_as_diff_op(self) -> LinearPDESystemOperator:
791855

792856

793857
class StokesletKernel(ElasticityKernel):
858+
"""
859+
.. autoattribute:: icomp
860+
.. autoattribute:: jcomp
861+
.. autoattribute:: viscosity_mu
862+
"""
863+
794864
def __new__(cls, dim, icomp, jcomp, viscosity_mu="mu", poisson_ratio=0.5):
795865
return object.__new__(cls)
796866

@@ -806,6 +876,12 @@ def __str__(self) -> str:
806876

807877
@dataclass(frozen=True)
808878
class StressletKernel(ExpressionKernel):
879+
"""
880+
.. autoattribute:: icomp
881+
.. autoattribute:: jcomp
882+
.. autoattribute:: kcomp
883+
.. autoattribute:: viscosity_mu
884+
"""
809885
mapper_method: ClassVar[str] = "map_stresslet_kernel"
810886

811887
icomp: int
@@ -893,6 +969,10 @@ class LineOfCompressionKernel(ExpressionKernel):
893969
*Force at a Point in the Interior of a Semi-Infinite Solid*.
894970
Physics. 7 (5): 195-202.
895971
`doi:10.1063/1.1745385 <https://doi.org/10.1063/1.1745385>`__.
972+
973+
.. autoattribute:: axis
974+
.. autoattribute:: viscosity_mu
975+
.. autoattribute:: poisson_ratio
896976
"""
897977

898978
mapper_method: ClassVar[str] = "map_line_of_compression_kernel"
@@ -976,6 +1056,7 @@ def get_pde_as_diff_op(self) -> LinearPDESystemOperator:
9761056
@dataclass(frozen=True)
9771057
class KernelWrapper(Kernel, ABC):
9781058
inner_kernel: Kernel
1059+
"""The kernel that is being wrapped (to take a derivative of, etc.)."""
9791060

9801061
def __init__(self, inner_kernel: Kernel) -> None:
9811062
Kernel.__init__(self, inner_kernel.dim)
@@ -1056,6 +1137,12 @@ def get_derivative_taker(
10561137
# {{{ derivatives
10571138

10581139
class DerivativeBase(KernelWrapper, ABC):
1140+
"""Bases: :class:`Kernel`
1141+
1142+
.. autoattribute:: inner_kernel
1143+
.. automethod:: replace_inner_kernel
1144+
"""
1145+
10591146
@override
10601147
def get_pde_as_diff_op(self) -> LinearPDESystemOperator:
10611148
return self.inner_kernel.get_pde_as_diff_op()
@@ -1071,9 +1158,14 @@ def replace_inner_kernel(self, new_inner_kernel: Kernel) -> Kernel:
10711158

10721159
@dataclass(frozen=True)
10731160
class AxisSourceDerivative(DerivativeBase):
1161+
"""
1162+
.. autoattribute:: axis
1163+
"""
1164+
10741165
mapper_method: ClassVar[str] = "map_axis_source_derivative"
10751166

10761167
axis: int
1168+
"""Direction axis for the source derivative."""
10771169

10781170
def __init__(self, axis: int, inner_kernel: Kernel) -> None:
10791171
super().__init__(inner_kernel)
@@ -1108,6 +1200,10 @@ def replace_inner_kernel(self, new_inner_kernel: Kernel) -> Kernel:
11081200

11091201
@dataclass(frozen=True)
11101202
class AxisTargetDerivative(DerivativeBase):
1203+
"""
1204+
.. autoattribute:: axis
1205+
"""
1206+
11111207
mapper_method: ClassVar[str] = "map_axis_target_derivative"
11121208
target_array_name: ClassVar[str] = "targets"
11131209

@@ -1195,8 +1291,14 @@ def map_common_subexpression_uncached(self,
11951291

11961292
@dataclass(frozen=True)
11971293
class DirectionalDerivative(DerivativeBase):
1294+
"""
1295+
.. autoattribute:: dir_vec_name
1296+
"""
11981297
directional_kind: ClassVar[Literal["src", "tgt"]]
1298+
"""The kind of this directional derivative (can only be a source or target)."""
1299+
11991300
dir_vec_name: str
1301+
"""Name of the vector used for the direction."""
12001302

12011303
def __init__(self, inner_kernel: Kernel, dir_vec_name: str | None = None) -> None:
12021304
if dir_vec_name is None:
@@ -1223,7 +1325,6 @@ def replace_inner_kernel(self, new_inner_kernel: Kernel) -> Kernel:
12231325

12241326
class DirectionalTargetDerivative(DirectionalDerivative):
12251327
mapper_method: ClassVar[str] = "map_directional_target_derivative"
1226-
12271328
directional_kind: ClassVar[Literal["src", "tgt"]] = "tgt"
12281329
target_array_name: ClassVar[str] = "targets"
12291330

@@ -1356,14 +1457,19 @@ def prepare_loopy_kernel(self, loopy_knl: lp.TranslationUnit) -> lp.TranslationU
13561457

13571458

13581459
class TargetPointMultiplier(KernelWrapper):
1359-
"""Wraps a kernel :math:`G(x, y)` and outputs :math:`x_j G(x, y)`
1460+
"""Bases: :class:`Kernel`
1461+
1462+
Wraps a kernel :math:`G(x, y)` and outputs :math:`x_j G(x, y)`
13601463
where :math:`x, y` are targets and sources respectively.
1464+
1465+
.. autoattribute:: axis
13611466
"""
13621467

13631468
mapper_method: ClassVar[str] = "map_target_point_multiplier"
13641469
target_array_name: ClassVar[str] = "targets"
13651470

13661471
axis: int
1472+
"""Coordinate axis with which to multiply the kernel."""
13671473

13681474
def __init__(self, axis: int, inner_kernel: Kernel) -> None:
13691475
KernelWrapper.__init__(self, inner_kernel)
@@ -1438,6 +1544,9 @@ def replace_inner_kernel(self, new_inner_kernel: Kernel) -> Kernel:
14381544

14391545

14401546
class KernelMapper(Generic[ResultT]):
1547+
"""
1548+
.. automethod:: __call__
1549+
"""
14411550
def rec(self, kernel: Kernel) -> ResultT:
14421551
try:
14431552
method = cast(
@@ -1453,6 +1562,10 @@ def __call__(self, kernel: Kernel) -> ResultT:
14531562

14541563

14551564
class KernelCombineMapper(KernelMapper[ResultT], ABC):
1565+
"""
1566+
.. automethod:: combine
1567+
"""
1568+
14561569
@abstractmethod
14571570
def combine(self, values: Iterable[ResultT]) -> ResultT:
14581571
raise NotImplementedError
@@ -1511,32 +1624,42 @@ def map_directional_source_derivative(
15111624

15121625

15131626
class AxisSourceDerivativeRemover(KernelIdentityMapper):
1627+
"""Removes all axis source derivatives from the kernel."""
1628+
15141629
@override
15151630
def map_axis_source_derivative(self, kernel: AxisSourceDerivative) -> Kernel:
15161631
return self.rec(kernel.inner_kernel)
15171632

15181633

15191634
class AxisTargetDerivativeRemover(KernelIdentityMapper):
1635+
"""Removes all axis target derivatives from the kernel."""
1636+
15201637
@override
15211638
def map_axis_target_derivative(self, kernel: AxisTargetDerivative) -> Kernel:
15221639
return self.rec(kernel.inner_kernel)
15231640

15241641

15251642
class TargetDerivativeRemover(AxisTargetDerivativeRemover):
1643+
"""Removes all target derivatives from the kernel."""
1644+
15261645
@override
15271646
def map_directional_target_derivative(
15281647
self, kernel: DirectionalTargetDerivative) -> Kernel:
15291648
return self.rec(kernel.inner_kernel)
15301649

15311650

15321651
class SourceDerivativeRemover(AxisSourceDerivativeRemover):
1652+
"""Removes all source derivatives from the kernel."""
1653+
15331654
@override
15341655
def map_directional_source_derivative(
15351656
self, kernel: DirectionalSourceDerivative) -> Kernel:
15361657
return self.rec(kernel.inner_kernel)
15371658

15381659

15391660
class TargetTransformationRemover(TargetDerivativeRemover):
1661+
"""Removes all target transformations from the kernel."""
1662+
15401663
@override
15411664
def map_target_point_multiplier(self, kernel: TargetPointMultiplier) -> Kernel:
15421665
return self.rec(kernel.inner_kernel)
@@ -1546,6 +1669,8 @@ def map_target_point_multiplier(self, kernel: TargetPointMultiplier) -> Kernel:
15461669

15471670

15481671
class DerivativeCounter(KernelCombineMapper[int]):
1672+
"""Counts the number of derivatives in the kernel."""
1673+
15491674
@override
15501675
def combine(self, values: Iterable[int]) -> int:
15511676
return sum(values)

0 commit comments

Comments
 (0)