From 0ad89d8ede5b4e6587c0cf95ab92c17b964caf18 Mon Sep 17 00:00:00 2001 From: Frederic HAN Date: Fri, 14 Aug 2020 16:24:05 +0200 Subject: [PATCH] doctest fixes + __len__ modification for giac 1.5.0.87 behavior with emptylist seq[] --- src/sage/libs/giac/__init__.py | 2 +- src/sage/libs/giac/giac.pxd | 2 ++ src/sage/libs/giac/giac.pyx | 37 ++++++++++++++++++++++------------ 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/sage/libs/giac/__init__.py b/src/sage/libs/giac/__init__.py index b49ec8d145c..ffcd5cbc243 100644 --- a/src/sage/libs/giac/__init__.py +++ b/src/sage/libs/giac/__init__.py @@ -12,7 +12,7 @@ EXAMPLES:: - sage: from sage.libs.giac import groebner_basis as gb_giac + sage: from sage.libs.giac import groebner_basis as gb_giac # random sage: P = PolynomialRing(QQ, 6, 'x') sage: I = sage.rings.ideal.Cyclic(P) sage: B = gb_giac(I.gens()) # random diff --git a/src/sage/libs/giac/giac.pxd b/src/sage/libs/giac/giac.pxd index c145018a453..1d9da88d8d4 100644 --- a/src/sage/libs/giac/giac.pxd +++ b/src/sage/libs/giac/giac.pxd @@ -40,6 +40,7 @@ cdef extern from "giac/giac.h" namespace "giac": vecteur(int) vecteur() void push_back(gen &) + int size() cdef struct ref_vecteur: pass cdef struct ref_sparse_poly1: @@ -73,6 +74,7 @@ cdef extern from "giac/giac.h" namespace "giac": mpz_t * ref_ZINTptr() except + gen * ref_MODptr() except + + vecteur * ref_VECTptr() except + # unsigned char type diff --git a/src/sage/libs/giac/giac.pyx b/src/sage/libs/giac/giac.pyx index 66bb6923466..3ba466938c3 100644 --- a/src/sage/libs/giac/giac.pyx +++ b/src/sage/libs/giac/giac.pyx @@ -27,7 +27,8 @@ in giac, but the mathematical computation is not done. This class is mainly for cython users. Here A is a Pygen element, and it is ready for any giac function.:: - sage: from sage.libs.giac.giac import * + sage: from sage.libs.giac.giac import * # random + //... sage: A = Pygen('2+2') sage: A 2+2 @@ -937,17 +938,28 @@ cdef class Pygen: return result def __len__(self): - #if (self.gptr != NULL): - try: - sig_on() - rep=GIAC_size(self.gptr[0],context_ptr).val - sig_off() - #GIAC_size return a gen. we take the int: val - return rep - except: - raise RuntimeError - #else: - # raise MemoryError,"This Pygen is not associated to a giac gen" + """ + TESTS:: + + sage: from sage.libs.giac.giac import libgiac + sage: l=libgiac("seq[]");len(l) # 29552 comment28 + 0 + + """ + if (self._type == 7): + sig_on() + rep=(self.gptr.ref_VECTptr()).size() + sig_off() + return rep + else: + try: + sig_on() + rep=GIAC_size(self.gptr[0],context_ptr).val + sig_off() + #GIAC_size return a gen. we take the int: val + return rep + except: + raise RuntimeError def __getitem__(self,i): #TODO?: add gen support for indexes @@ -979,7 +991,6 @@ cdef class Pygen: sage: l=Pygen() sage: l[0] Traceback (most recent call last): - File "", line 1, in ... IndexError: list index 0 out of range """