geometric-kernels / GeometricKernels

Geometric kernels on manifolds, meshes and graphs
https://geometric-kernels.github.io/
Apache License 2.0
214 stars 18 forks source link

Signature mismatch for SpecialUnitary space #150

Open vabor112 opened 4 weeks ago

vabor112 commented 4 weeks ago

Bug

The list of signatures in WeylAdditionTheorem._signatures for SpecialUnitary(5) does not match the list of precomputed signatures in precomputed_characters.json (although the sizes of these two lists are equal).

In particular, WeylAdditionTheorem._signatures contains (3, 0, 0, 0, 0) and does not contain (3, 3, 3, 3, 0) while for precomputed_characters.json it is the other way around.

To reproduce

The simple code

import geometric_kernels
from geometric_kernels.spaces import SpecialUnitary
from geometric_kernels.kernels.matern_kernel import default_num

eigenfunctions = space.get_eigenfunctions(default_num(space))

gives

KeyError                                  Traceback (most recent call last)
Cell In[5], line 1
----> 1 eigenfunctions = space.get_eigenfunctions(default_num(space))

File ~/Workspace/GeometricKernels/geometric_kernels/spaces/su.py:205, in SpecialUnitary.get_eigenfunctions(self, num)
    197 def get_eigenfunctions(self, num: int) -> Eigenfunctions:
    198     """
    199     Returns the :class:`~.SUEigenfunctions` object with `num` levels
    200     and order n.
   (...)
    203         Number of levels.
    204     """
--> 205     return SUEigenfunctions(self.n, num)

File ~/Workspace/GeometricKernels/geometric_kernels/spaces/su.py:40, in SUEigenfunctions.__init__(self, n, num_levels, compute_characters)
     36 self.rank = n - 1
     38 self.rho = np.arange(self.n - 1, -self.n, -2) * 0.5
---> 40 super().__init__(n, num_levels, compute_characters)

File ~/Workspace/GeometricKernels/geometric_kernels/spaces/lie_groups.py:93, in WeylAdditionTheorem.__init__(self, n, num_levels, compute_characters)
     91 if compute_characters:
     92     print("self._signatures", self._signatures)
---> 93     self._characters = [
     94         self._compute_character(n, signature) for signature in self._signatures
     95     ]
     96 self._num_eigenfunctions: Optional[int] = None

File ~/Workspace/GeometricKernels/geometric_kernels/spaces/lie_groups.py:94, in <listcomp>(.0)
     91 if compute_characters:
     92     print("self._signatures", self._signatures)
     93     self._characters = [
---> 94         self._compute_character(n, signature) for signature in self._signatures
     95     ]
     96 self._num_eigenfunctions: Optional[int] = None

File ~/Workspace/GeometricKernels/geometric_kernels/spaces/su.py:86, in SUEigenfunctions._compute_character(self, n, signature)
     83 def _compute_character(
     84     self, n: int, signature: Tuple[int, ...]
     85 ) -> LieGroupCharacter:
---> 86     return SUCharacter(n, signature)

File ~/Workspace/GeometricKernels/geometric_kernels/spaces/su.py:115, in SUCharacter.__init__(self, n, signature)
    113 self.signature = signature
    114 self.n = n
--> 115 self.coeffs, self.monoms = self._load()

File ~/Workspace/GeometricKernels/geometric_kernels/spaces/su.py:127, in SUCharacter._load(self)
    125     return coeffs, monoms
    126 except KeyError as e:
--> 127     raise KeyError(
    128         "Unable to retrieve character parameters for signature {} of {}, "
    129         "perhaps it is not precomputed."
    130         "Run compute_characters.py with changed parameters.".format(
    131             e.args[0], group_name
    132         )
    133     ) from None

KeyError: 'Unable to retrieve character parameters for signature (3, 0, 0, 0, 0) of SU(5), perhaps it is not precomputed.Run compute_characters.py with changed parameters.'

Expected behavior

Same lists, no exception.

System information