Ticket #9466: 9466.3.patch

File 9466.3.patch, 3.6 KB (added by mstreng, 8 years ago)
  • sage/rings/finite_rings/element_givaro.pyx

    # HG changeset patch
    # User Marco Streng <marco.streng@gmail.com>
    # Date 1374776398 -3600
    # Node ID fb81ccd2ff5105123712af33feea5488004b4546
    # Parent  5d8c13e7b81a1e152855073f97a4d48ee97255d1
    9466 all square roots of non-square elements
    
    diff --git a/sage/rings/finite_rings/element_givaro.pyx b/sage/rings/finite_rings/element_givaro.pyx
    a b  
    10931093            sage: K = GF(8, 'a')
    10941094            sage: all([a.sqrt()*a.sqrt() == a for a in K if a.is_square()])
    10951095            True
     1096            sage: K.<a>=FiniteField(9)
     1097            sage: a.sqrt(extend = False, all = True)
     1098            []
     1099
    10961100        """
    10971101        if all:
    1098             a = self.sqrt()
    1099             return [a, -a] if -a != a else [a]
     1102            if self.is_square():
     1103                a = self.sqrt()
     1104                return [a, -a] if -a != a else [a]
     1105            return []
    11001106        cdef Cache_givaro cache = <Cache_givaro>self._cache
    11011107        if self.element == cache.objectptr.one:
    11021108            return make_FiniteField_givaroElement(cache, cache.objectptr.one)
  • sage/rings/finite_rings/integer_mod.pyx

    diff --git a/sage/rings/finite_rings/integer_mod.pyx b/sage/rings/finite_rings/integer_mod.pyx
    a b  
    869869            9
    870870            sage: Mod(1/25, next_prime(2^90)).sqrt()^(-2)
    871871            25
    872        
     872
    873873        ::
    874874       
    875875            sage: a = Mod(3,5); a
     
    911911            (13, 13, 104)
    912912            sage: all([x^2==169 for x in v])
    913913            True
     914
     915        ::
     916
     917            sage: t = FiniteField(next_prime(2^100))(4)
     918            sage: t.sqrt(extend = False, all = True)
     919            [2, 1267650600228229401496703205651]
     920            sage: t = FiniteField(next_prime(2^100))(2)            sage: t.sqrt(extend = False, all = True)
     921            []
    914922       
    915923        Modulo a power of 2::
    916924       
     
    946954                    # TODO
    947955                    raise NotImplementedError
    948956                return z
     957            if all:
     958                return []
    949959            raise ValueError, "self must be a square"
    950960           
    951961        F = self._parent.factored_order()
     
    28232833                    if (i*i) % n == self.ivalue:
    28242834                        return self._new_c(i)
    28252835                if not extend:
     2836                    if all:
     2837                        return []
    28262838                    raise ValueError, "self must be a square"
    28272839        # Either it failed but extend was True, or the generic algorithm is better
    28282840        return IntegerMod_abstract.sqrt(self, extend=extend, all=all)
  • sage/rings/integer.pyx

    diff --git a/sage/rings/integer.pyx b/sage/rings/integer.pyx
    a b  
    51665166            <type 'sage.rings.real_mpfr.RealNumber'>
    51675167            sage: type(Integer(-5).sqrt(prec=53))
    51685168            <type 'sage.rings.complex_number.ComplexNumber'>
     5169
     5170        TESTS:
     5171
     5172        Check that :trac:`9466` is fixed::
     5173
     5174            sage: 3.sqrt(extend=False, all=True)
     5175            []
    51695176        """
    51705177        if mpz_sgn(self.value) == 0:
    51715178            return [self] if all else self
     
    51885195
    51895196        if non_square:
    51905197            if not extend:
    5191                 raise ValueError, "square root of %s not an integer"%self
     5198                if not all:
     5199                   raise ValueError, "square root of %s not an integer"%self
     5200                else:
     5201                    return []
    51925202            from sage.functions.other import _do_sqrt
    51935203            return _do_sqrt(self, prec=prec, all=all)
    51945204