def __init__(self, base, ideal=None): """ The Python constructor. EXAMPLES:: sage: Berkovich_Cp_Affine(3) Affine Berkovich line over Cp(3) of precision 20 """ if base in ZZ: if base.is_prime(): base = Qp(base) # change to Qpbar else: raise ValueError("non-prime passed into Berkovich space") if is_AffineSpace(base): base = base.base_ring() if base in NumberFields(): if ideal is None: raise ValueError('passed a number field but not an ideal') if base is not QQ: if not isinstance(ideal, NumberFieldFractionalIdeal): raise ValueError( 'ideal was not an ideal of a number field') if ideal.number_field() != base: raise ValueError('passed number field ' + \ '%s but ideal was an ideal of %s' %(base, ideal.number_field())) prime = ideal.smallest_integer() else: if ideal not in QQ: raise ValueError('ideal was not an element of QQ') prime = ideal if not ideal.is_prime(): raise ValueError('passed non prime ideal') self._base_type = 'number field' elif isinstance(base, sage.rings.abc.pAdicField): # change base to Qpbar prime = base.prime() ideal = None self._base_type = 'padic field' else: raise ValueError("base of Berkovich Space must be a padic field " + \ "or a number field") self._ideal = ideal self._p = prime Parent.__init__(self, base=base, category=TopologicalSpaces())