geometric_kernels.utils.special_functions

Special mathematical functions used in the library.

Module Contents

geometric_kernels.utils.special_functions.hypercube_graph_heat_kernel(lengthscale, X, X2=None, normalized_laplacian=True)[source]

Analytic formula for the heat kernel on the hypercube graph, see Equation (14) in Borovitskiy et al. [2023].

Parameters:
  • lengthscale (lab.Numeric) – The length scale of the kernel, an array of shape [1].

  • X (lab.Numeric) – A batch of inputs, an array of shape [N, d].

  • X2 (beartype.typing.Optional[lab.Numeric]) – A batch of inputs, an array of shape [N2, d].

  • normalized_laplacian (bool)

Returns:

The kernel matrix, an array of shape [N, N2].

geometric_kernels.utils.special_functions.kravchuk_normalized(d, j, m, kravchuk_normalized_j_minus_1=None, kravchuk_normalized_j_minus_2=None)[source]

This function returns \(G_{d, j, m}/G_{d, j, 0}\) where \(G_{d, j, m}\) is the Kravchuk polynomial defined below.

Define the Kravchuk polynomial of degree d > 0 and order 0 <= j <= d as the function \(G_{d, j, m}\) of the independent variable 0 <= m <= d given by

\[G_{d, j, m} = \sum_{T \subseteq \{0, .., d-1\}, |T| = j} w_T(x).\]

Here \(w_T\) are the Walsh functions on the hypercube graph \(C^d\) and \(x \in C^d\) is an arbitrary binary vector with \(m\) ones (the right-hand side does not depend on the choice of a particular vector of the kind).

Note

We are using the three term recurrence relation to compute the Kravchuk polynomials. Cf. Equation (60) of Chapter 5 in MacWilliams and Sloane “The Theory of Error-Correcting Codes”, 1977. The parameters q and \(\gamma\) from MacWilliams and Sloane [1977] are set to be q = 2; \(\gamma = q - 1 = 1\).

Note

We use the fact that \(G_{d, j, 0} = \binom{d}{j}\).

Parameters:
  • d (int) – The degree of Kravhuk polynomial, an integer d > 0. Maps to n in MacWilliams and Sloane [1977].

  • j (int) – d The order of Kravhuk polynomial, an integer 0 <= j <= d. Maps to k in MacWilliams and Sloane [1977].

  • m (lab.Int) – The independent variable, an integer 0 <= m <= d. Maps to x in MacWilliams and Sloane [1977].

  • kravchuk_normalized_j_minus_1 (beartype.typing.Optional[lab.Float]) – The optional precomputed value of \(G_{d, j-1, m}/G_{d, j-1, 0}\), helps to avoid exponential complexity growth due to the recursion.

  • kravchuk_normalized_j_minus_2 (beartype.typing.Optional[lab.Float]) – The optional precomputed value of \(G_{d, j-2, m}/G_{d, j-2, 0}\), helps to avoid exponential complexity growth due to the recursion.

Returns:

\(G_{d, j, m}/G_{d, j, 0}\) where \(G_{d, j, m}\) is the Kravchuk polynomial.

Return type:

lab.Float

geometric_kernels.utils.special_functions.walsh_function(d, combination, x)[source]

This function returns the value of the Walsh function

\[w_T(x_0, .., x_{d-1}) = (-1)^{\sum_{j \in T} x_j}\]

where \(d\) is d, \(T\) is combination, and \(x = (x_0, .., x_{d-1})\) is x.

Parameters:
  • d (int) – The degree of the Walsh function and the dimension of its inputs. An integer d > 0.

  • combination (beartype.typing.List[int]) – A subset of the set \(\{0, .., d-1\}\) determining the particular Walsh function. A list of integers.

  • x (lab.Bool) – A batch of binary vectors \(x = (x_0, .., x_{d-1})\) of shape [N, d].

Returns:

The value of the Walsh function \(w_T(x)\) evaluated for every \(x\) in the batch. An array of shape [N].

Return type:

lab.Float