class_docstr: A prime ideal in a ring of algebraic integers.
docstr: Parameters
  ==========
  
  ZK : :py:class:`~.Submodule`
      The maximal order where this ideal lives.
  p : int
      The rational prime this ideal divides.
  alpha : :py:class:`~.PowerBasisElement`
      Such that the ideal is equal to ``p*ZK + alpha*ZK``.
  f : int
      The inertia degree.
  e : int, ``None``, optional
      The ramification index, if already known. If ``None``, we will
      compute it here.
code: def __init__(self, ZK, p, alpha, f, e=None):
      """
      Parameters
      ==========
  
      ZK : :py:class:`~.Submodule`
          The maximal order where this ideal lives.
      p : int
          The rational prime this ideal divides.
      alpha : :py:class:`~.PowerBasisElement`
          Such that the ideal is equal to ``p*ZK + alpha*ZK``.
      f : int
          The inertia degree.
      e : int, ``None``, optional
          The ramification index, if already known. If ``None``, we will
          compute it here.
  
      """
      _check_formal_conditions_for_maximal_order(ZK)
      self.ZK = ZK
      self.p = p
      self.alpha = alpha
      self.f = f
      self._test_factor = None
      self.e = e if e is not None else self.valuation(p * ZK)
  
imports: from sympy.polys.polytools import Poly
  from sympy.polys.domains.finitefield import FF
  from sympy.polys.domains.rationalfield import QQ
  from sympy.polys.domains.integerring import ZZ
  from sympy.polys.matrices.domainmatrix import DomainMatrix
  from sympy.polys.polyerrors import CoercionFailed
  from sympy.polys.polyutils import IntegerPowerable
  from sympy.utilities.decorator import public
  from .basis import round_two, nilradical_mod_p
  from .exceptions import StructureError
  from .modules import ModuleEndomorphism, find_min_poly
  from .utilities import coeff_search, supplement_a_subspace
label_desc: Use image node_id 1 to create a new PrimeIdeal object from inherited base classes: IntegerPowerable with example: obj = PrimeIdeal(ZK, p, alpha, f, e)