Skip to content

Commit 525a848

Browse files
committed
docs: improve kernel docs
1 parent 4c383c8 commit 525a848

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()
@@ -1077,9 +1164,14 @@ def replace_inner_kernel(self, new_inner_kernel: Kernel) -> Kernel:
10771164

10781165
@dataclass(frozen=True)
10791166
class AxisSourceDerivative(DerivativeBase):
1167+
"""
1168+
.. autoattribute:: axis
1169+
"""
1170+
10801171
mapper_method: ClassVar[str] = "map_axis_source_derivative"
10811172

10821173
axis: int
1174+
"""Direction axis for the source derivative."""
10831175

10841176
def __init__(self, axis: int, inner_kernel: Kernel) -> None:
10851177
super().__init__(inner_kernel)
@@ -1105,6 +1197,10 @@ def get_derivative_coeff_dict_at_source(
11051197

11061198
@dataclass(frozen=True)
11071199
class AxisTargetDerivative(DerivativeBase):
1200+
"""
1201+
.. autoattribute:: axis
1202+
"""
1203+
11081204
mapper_method: ClassVar[str] = "map_axis_target_derivative"
11091205
target_array_name: ClassVar[str] = "targets"
11101206

@@ -1183,8 +1279,14 @@ def map_common_subexpression_uncached(self,
11831279

11841280
@dataclass(frozen=True)
11851281
class DirectionalDerivative(DerivativeBase):
1282+
"""
1283+
.. autoattribute:: dir_vec_name
1284+
"""
11861285
directional_kind: ClassVar[Literal["src", "tgt"]]
1286+
"""The kind of this directional derivative (can only be a source or target)."""
1287+
11871288
dir_vec_name: str
1289+
"""Name of the vector used for the direction."""
11881290

11891291
def __init__(self, inner_kernel: Kernel, dir_vec_name: str | None = None) -> None:
11901292
if dir_vec_name is None:
@@ -1201,7 +1303,6 @@ def __str__(self) -> str:
12011303

12021304
class DirectionalTargetDerivative(DirectionalDerivative):
12031305
mapper_method: ClassVar[str] = "map_directional_target_derivative"
1204-
12051306
directional_kind: ClassVar[Literal["src", "tgt"]] = "tgt"
12061307
target_array_name: ClassVar[str] = "targets"
12071308

@@ -1334,14 +1435,19 @@ def prepare_loopy_kernel(self, loopy_knl: lp.TranslationUnit) -> lp.TranslationU
13341435

13351436

13361437
class TargetPointMultiplier(KernelWrapper):
1337-
"""Wraps a kernel :math:`G(x, y)` and outputs :math:`x_j G(x, y)`
1438+
"""Bases: :class:`Kernel`
1439+
1440+
Wraps a kernel :math:`G(x, y)` and outputs :math:`x_j G(x, y)`
13381441
where :math:`x, y` are targets and sources respectively.
1442+
1443+
.. autoattribute:: axis
13391444
"""
13401445

13411446
mapper_method: ClassVar[str] = "map_target_point_multiplier"
13421447
target_array_name: ClassVar[str] = "targets"
13431448

13441449
axis: int
1450+
"""Coordinate axis with which to multiply the kernel."""
13451451

13461452
def __init__(self, axis: int, inner_kernel: Kernel) -> None:
13471453
KernelWrapper.__init__(self, inner_kernel)
@@ -1408,6 +1514,9 @@ def get_pde_as_diff_op(self) -> LinearPDESystemOperator:
14081514

14091515

14101516
class KernelMapper(Generic[ResultT]):
1517+
"""
1518+
.. automethod:: __call__
1519+
"""
14111520
def rec(self, kernel: Kernel) -> ResultT:
14121521
try:
14131522
method = cast(
@@ -1423,6 +1532,10 @@ def __call__(self, kernel: Kernel) -> ResultT:
14231532

14241533

14251534
class KernelCombineMapper(KernelMapper[ResultT], ABC):
1535+
"""
1536+
.. automethod:: combine
1537+
"""
1538+
14261539
@abstractmethod
14271540
def combine(self, values: Iterable[ResultT]) -> ResultT:
14281541
raise NotImplementedError
@@ -1479,32 +1592,42 @@ def map_directional_source_derivative(
14791592

14801593

14811594
class AxisSourceDerivativeRemover(KernelIdentityMapper):
1595+
"""Removes all axis source derivatives from the kernel."""
1596+
14821597
@override
14831598
def map_axis_source_derivative(self, kernel: AxisSourceDerivative) -> Kernel:
14841599
return self.rec(kernel.inner_kernel)
14851600

14861601

14871602
class AxisTargetDerivativeRemover(KernelIdentityMapper):
1603+
"""Removes all axis target derivatives from the kernel."""
1604+
14881605
@override
14891606
def map_axis_target_derivative(self, kernel: AxisTargetDerivative) -> Kernel:
14901607
return self.rec(kernel.inner_kernel)
14911608

14921609

14931610
class TargetDerivativeRemover(AxisTargetDerivativeRemover):
1611+
"""Removes all target derivatives from the kernel."""
1612+
14941613
@override
14951614
def map_directional_target_derivative(
14961615
self, kernel: DirectionalTargetDerivative) -> Kernel:
14971616
return self.rec(kernel.inner_kernel)
14981617

14991618

15001619
class SourceDerivativeRemover(AxisSourceDerivativeRemover):
1620+
"""Removes all source derivatives from the kernel."""
1621+
15011622
@override
15021623
def map_directional_source_derivative(
15031624
self, kernel: DirectionalSourceDerivative) -> Kernel:
15041625
return self.rec(kernel.inner_kernel)
15051626

15061627

15071628
class TargetTransformationRemover(TargetDerivativeRemover):
1629+
"""Removes all target transformations from the kernel."""
1630+
15081631
@override
15091632
def map_target_point_multiplier(self, kernel: TargetPointMultiplier) -> Kernel:
15101633
return self.rec(kernel.inner_kernel)
@@ -1514,6 +1637,8 @@ def map_target_point_multiplier(self, kernel: TargetPointMultiplier) -> Kernel:
15141637

15151638

15161639
class DerivativeCounter(KernelCombineMapper[int]):
1640+
"""Counts the number of derivatives in the kernel."""
1641+
15171642
@override
15181643
def combine(self, values: Iterable[int]) -> int:
15191644
return sum(values)

0 commit comments

Comments
 (0)