Source code for ddg.geometry.lie_models

"""Lie geometry module.
"""
import numpy as np

from ddg.geometry import laguerre_models, moebius_models
from ddg.geometry._quadrics import Quadric
from ddg.geometry.geometry_model_templates import CayleyKleinGeometry

__all__ = ["ProjectiveModel"]


[docs]class ProjectiveModel(CayleyKleinGeometry): """Lie geometry. .. rubric:: Model space The model space is the quadric with matrix `diag([1,...,1, -1, -1])` in RP^{n+2}. .. Representation of objects Points in this quadric correspond to oriented hyperspheres and hyperplanes in R^n. Parameters ---------- dimension : int Attributes ---------- dimension : int """ @property def absolute(self): """The absolute quadric with matrix ``diag([1,...,1, -1, -1])``. Returns ------- ddg.geometry.Quadric """ diag = np.ones(self.dimension + 3) diag[-1] = diag[-2] = -1 return Quadric(np.diag(diag)) @property def moebius_point(self): p = np.zeros(self.ambient_dimension + 1) p[-1] = 1 return ddg.geometry.Point(p) @property def moebius_subspace(self): return self.absolute.polarize(self.moebius_point)
[docs] def moebius(self): """Corresponding projective model of Moebius geometry.""" return moebius_models.ProjectiveModel(self.dimension)
[docs] def from_moebius(self, object_, embedded=False): raise NotImplementedError
[docs] def to_moebius(self, object_, embedded=False): raise NotImplementedError
@property def laguerre_point(self): p = np.zeros(n) p[[-2, -3]] = 0.5 return ddg.geometry.Point(p) @property def laguerre_subspace(self): return self.absolute.polarize(self.laguerre_point)
[docs] def laguerre(self): """Corresponding projective model (Blaschke cylinder) of Laguerre geometry.""" return laguerre_models.ProjectiveModel(self.dimension)
[docs] def from_laguerre(self, object_, embedded=False): raise NotImplementedError
[docs] def to_laguerre(self, object_, embedded=False): raise NotImplementedError
def __contains__(self, point): return point in self.absolute def __str__(self): return f"{self.dimension}D Lie geometry"