khive_crystal.fundamental_khives API documentation

# Module `khive_crystal.fundamental_khives`

## Classes

`class FundamentalKHives (n: int, alpha: list[int])`

  This class is a subclass of KHives, and has the crystal structure on a set of K-hives with fundamental weight.

  Expand source code

      @dataclass(frozen=True)
      class FundamentalKHives(KHives):
          """
          This class is a subclass of KHives,
          and has the crystal structure on a set of K-hives with fundamental weight.
          """

          def __post_init__(self) -> None:
              self.is_fundamental_weight()

          def is_fundamental_weight(self) -> None:
              if not all(x in [0, 1] for x in self.alpha):
                  raise ValueError("Invaid value! alpha is not a fundamental weight.")

          def phi(self, i: int) -> Callable[[KHive], int]:
              """Compute varphi_i(H)

              Args:
                  i (int): i in I.

              Returns:
                  Callable: _phi

              Examples:
                  >>> H_alpha = FundamentalKHives(n=3, alpha=[1, 1, 0])
                  >>> H = H_alpha.highest_weight_vector()
                  >>> H_alpha.phi(i=1)(H=H)
                  0

                  >>> H_alpha = FundamentalKHives(n=3, alpha=[1, 1, 0])
                  >>> H = H_alpha.highest_weight_vector()
                  >>> H_alpha.phi(i=2)(H=H)
                  1
              """

              def _phi(H: KHive) -> int:
                  return max(self.inner_product(i=i, weight=self.weight(H=H)), 0)

              return _phi

          def f(self, i: int) -> Callable[[KHive], KHive | None]:
              """Get f_i(H)

              Args:
                  i (int): i in I.

              Returns:
                  Callable: f_i

              Examples:
                  >>> H_alpha = FundamentalKHives(n=3, alpha=[1, 1, 0])
                  >>> H = H_alpha.highest_weight_vector()
                  >>> H_alpha.f(i=1)(H=H)

                  >>> H_alpha = FundamentalKHives(n=3, alpha=[1, 1, 0])
                  >>> H = H_alpha.highest_weight_vector()
                  >>> H_alpha.f(i=2)(H=H)
                  KHive(n=3, alpha=[1, 1, 0], beta=[1, 0, 1], gamma=[0, 0, 0], Uij=[[0, 0], [1]])

                  >>> H_alpha = FundamentalKHives(n=3, alpha=[1, 1, 0])
                  >>> H: KHive = KHive(n=3, alpha=[1, 1, 0], beta=[1, 0, 1], gamma=[0, 0, 0], Uij=[[0, 0], [1]])
                  >>> H_alpha.f(i=1)(H)
                  KHive(n=3, alpha=[1, 1, 0], beta=[0, 1, 1], gamma=[0, 0, 0], Uij=[[1, 0], [1]])
              """  # noqa: B950

              def _f(H: KHive) -> KHive | None:
                  if self.phi(i=i)(H) == 0:
                      return None

                  i_as_index: int = i - 1

                  beta: list[int] = H.beta.copy()
                  gamma: list[int] = [0] * self.n
                  Uij: list[list[int]] = deepcopy(H.Uij)

                  beta[i_as_index] += -1
                  beta[i_as_index + 1] += 1

                  act_point_as_index: int
                  Uxi: list[int] = H.get_Uji()[i_as_index - 1]
                  is_Uxi_geq_zeros: list[bool] = [Uji > 0 for Uji in Uxi]
                  if (i == 1) | (not any(is_Uxi_geq_zeros)):
                      act_point_as_index = i_as_index
                  else:
                      act_point_as_index = is_Uxi_geq_zeros.index(True)

                  i_as_index_in_Uij: int = i_as_index - act_point_as_index - 1
                  ip1_as_index_in_Uij: int = i_as_index - act_point_as_index
                  if 0 <= (i_as_index_in_Uij):
                      Uij[act_point_as_index][i_as_index_in_Uij] += -1  # U_{ki}
                  Uij[act_point_as_index][ip1_as_index_in_Uij] += 1  # U_{k,i+1}

                  return KHive(n=self.n, alpha=self.alpha, beta=beta, gamma=gamma, Uij=Uij)

              return _f

          def epsilon(self, i: int) -> Callable[[KHive], int]:
              """Compute varepsilon_i(H)

              Args:
                  i (int): i in I.

              Returns:
                  Callable: _epsilon

              Examples
                  >>> H_alpha = FundamentalKHives(n=3, alpha=[1, 1, 0])
                  >>> H = H_alpha.highest_weight_vector()
                  >>> H_alpha.epsilon(i=1)(H=H)
                  0

                  >>> H_alpha = FundamentalKHives(n=3, alpha=[1, 1, 0])
                  >>> H = H_alpha.highest_weight_vector()
                  >>> H_alpha.epsilon(i=2)(H=H)
                  0
              """

              def _epsilon(H: KHive) -> int:
                  return max(-self.inner_product(i=i, weight=self.weight(H=H)), 0)

              return _epsilon

          def e(self, i: int) -> Callable[[KHive], KHive | None]:
              """Get e_i(H)

              Args:
                  i (int): i in I.

              Returns:
                  Callable: e_i

              Examples:
                  >>> H_alpha = FundamentalKHives(n=3, alpha=[1, 1, 0])
                  >>> H = H_alpha.highest_weight_vector()
                  >>> H_alpha.e(i=1)(H=H)

                  >>> H_alpha = FundamentalKHives(n=3, alpha=[1, 1, 0])
                  >>> H = KHive(
                  ...     n=3,
                  ...     alpha=[1, 1, 0],
                  ...     beta=[1, 0, 1],
                  ...     gamma=[0, 0, 0],
                  ...     Uij=[[0, 0], [1]]
                  ... )
                  >>> H_alpha.e(i=2)(H=H)
                  KHive(n=3, alpha=[1, 1, 0], beta=[1, 1, 0], gamma=[0, 0, 0], Uij=[[0, 0], [0]])

                  >>> H_alpha = FundamentalKHives(n=3, alpha=[1, 1, 0])
                  >>> H: KHive = KHive(n=3, alpha=[1, 1, 0], beta=[0, 1, 1], gamma=[0, 0, 0], Uij=[[1, 0], [1]])
                  >>> H_alpha.e(i=1)(H)
                  KHive(n=3, alpha=[1, 1, 0], beta=[1, 0, 1], gamma=[0, 0, 0], Uij=[[0, 0], [1]])
              """  # noqa: B950

              def _e(H: KHive) -> KHive | None:
                  if self.epsilon(i=i)(H) == 0:
                      return None

                  i_as_index: int = i - 1

                  beta: list[int] = H.beta.copy()
                  gamma: list[int] = [0] * self.n
                  Uij: list[list[int]] = deepcopy(H.Uij)

                  beta[i_as_index] += 1
                  beta[i_as_index + 1] += -1

                  act_point_as_index: int
                  Uxip1: list[int] = H.get_Uji()[i_as_index]
                  is_Uxip1_geq_zeros: list[bool] = [Uji > 0 for Uji in Uxip1]
                  if not any(is_Uxip1_geq_zeros):
                      act_point_as_index = i_as_index
                  else:
                      act_point_as_index = is_Uxip1_geq_zeros.index(True)

                  i_as_index_in_Uij: int = i_as_index - act_point_as_index - 1
                  ip1_as_index_in_Uij: int = i_as_index - act_point_as_index
                  if 0 <= (i_as_index_in_Uij):
                      Uij[act_point_as_index][i_as_index_in_Uij] += +1  # U_{ki}
                  Uij[act_point_as_index][ip1_as_index_in_Uij] += -1  # U_{k,i+1}

                  return KHive(n=self.n, alpha=self.alpha, beta=beta, gamma=gamma, Uij=Uij)

              return _e

  ### Ancestors

  - khive_crystal.khives.KHives

  ### Methods

  `def e(self, i: int) ‑> collections.abc.Callable[[khive_crystal.khive.KHive], khive_crystal.khive.KHive | None]`

    Get e_i(H)

    ## Args

    `i` :`int`
      i in I.

    ## Returns

    `Callable`
      e_i

    ## Examples

        >>> H_alpha = FundamentalKHives(n=3, alpha=[1, 1, 0])
        >>> H = H_alpha.highest_weight_vector()
        >>> H_alpha.e(i=1)(H=H)

        >>> H_alpha = FundamentalKHives(n=3, alpha=[1, 1, 0])
        >>> H = KHive(
        ...     n=3,
        ...     alpha=[1, 1, 0],
        ...     beta=[1, 0, 1],
        ...     gamma=[0, 0, 0],
        ...     Uij=[[0, 0], [1]]
        ... )
        >>> H_alpha.e(i=2)(H=H)
        KHive(n=3, alpha=[1, 1, 0], beta=[1, 1, 0], gamma=[0, 0, 0], Uij=[[0, 0], [0]])

        >>> H_alpha = FundamentalKHives(n=3, alpha=[1, 1, 0])
        >>> H: KHive = KHive(n=3, alpha=[1, 1, 0], beta=[0, 1, 1], gamma=[0, 0, 0], Uij=[[1, 0], [1]])
        >>> H_alpha.e(i=1)(H)
        KHive(n=3, alpha=[1, 1, 0], beta=[1, 0, 1], gamma=[0, 0, 0], Uij=[[0, 0], [1]])

  `def epsilon(self, i: int) ‑> collections.abc.Callable[[khive_crystal.khive.KHive], int]`

    Compute varepsilon_i(H)

    ## Args

    `i` :`int`
      i in I.

    ## Returns

    `Callable`
      _epsilon

    Examples >>> H_alpha = FundamentalKHives(n=3, alpha=[1, 1, 0]) >>> H = H_alpha.highest_weight_vector() >>> H_alpha.epsilon(i=1)(H=H) 0

        >>> H_alpha = FundamentalKHives(n=3, alpha=[1, 1, 0])
        >>> H = H_alpha.highest_weight_vector()
        >>> H_alpha.epsilon(i=2)(H=H)
        0

  `def f(self, i: int) ‑> collections.abc.Callable[[khive_crystal.khive.KHive], khive_crystal.khive.KHive | None]`

    Get f_i(H)

    ## Args

    `i` :`int`
      i in I.

    ## Returns

    `Callable`
      f_i

    ## Examples

        >>> H_alpha = FundamentalKHives(n=3, alpha=[1, 1, 0])
        >>> H = H_alpha.highest_weight_vector()
        >>> H_alpha.f(i=1)(H=H)

        >>> H_alpha = FundamentalKHives(n=3, alpha=[1, 1, 0])
        >>> H = H_alpha.highest_weight_vector()
        >>> H_alpha.f(i=2)(H=H)
        KHive(n=3, alpha=[1, 1, 0], beta=[1, 0, 1], gamma=[0, 0, 0], Uij=[[0, 0], [1]])

        >>> H_alpha = FundamentalKHives(n=3, alpha=[1, 1, 0])
        >>> H: KHive = KHive(n=3, alpha=[1, 1, 0], beta=[1, 0, 1], gamma=[0, 0, 0], Uij=[[0, 0], [1]])
        >>> H_alpha.f(i=1)(H)
        KHive(n=3, alpha=[1, 1, 0], beta=[0, 1, 1], gamma=[0, 0, 0], Uij=[[1, 0], [1]])

  `def is_fundamental_weight(self) ‑> None`
  `def phi(self, i: int) ‑> collections.abc.Callable[[khive_crystal.khive.KHive], int]`

    Compute varphi_i(H)

    ## Args

    `i` :`int`
      i in I.

    ## Returns

    `Callable`
      _phi

    ## Examples

        >>> H_alpha = FundamentalKHives(n=3, alpha=[1, 1, 0])
        >>> H = H_alpha.highest_weight_vector()
        >>> H_alpha.phi(i=1)(H=H)
        0

        >>> H_alpha = FundamentalKHives(n=3, alpha=[1, 1, 0])
        >>> H = H_alpha.highest_weight_vector()
        >>> H_alpha.phi(i=2)(H=H)
        1