//
/* -*- Compile-command: "swig -c++ -java -package javagiac -outdir javagiac giac.i ; g++ -c -fpic giac_wrap.cxx  -I/usr/lib/jvm/default-java/include -I/usr/lib/jvm/default-java/include/linux && g++ -shared giac_wrap.o -lgiac -o libjavagiac.so" -*- */
// Mac commands: swig -c++ -java -package javagiac -outdir javagiac giac.i 
// 32 bits dynamic g++ -m32 -fPIC -c giac_wrap.cxx  -I/System/Library/Frameworks/JavaVM.framework/Headers -I/System/Library/Frameworks/JavaVM.framework/Headers &&  g++ -m32 -shared giac_wrap.o -L.libs -lgiac -dynamiclib -framework JavaVM  -o libjavagiac.jnilib
// 64 bits static
// g++ -m64 -fPIC -c giac_wrap.cxx  -I/System/Library/Frameworks/JavaVM.framework/Headers -I/System/Library/Frameworks/JavaVM.framework/Headers &&  g++ -m64 -shared giac_wrap.o first.o input_lexer.o unary.o gen.o identificateur.o usual.o pari.o cocoa.o TmpLESystemSolver.o TmpFGLM.o prog.o rpn.o plot.o plot3d.o help.o isom.o gauss.o alg_ext.o ifactor.o global.o tex.o vecteur.o csturm.o subst.o series.o lin.o intg.o intgab.o risch.o solve.o derive.o ezgcd.o modpoly.o modfactor.o index.o symbolic.o  input_parser.o desolve.o quater.o permu.o misc.o moyal.o maple.o ti89.o mathml.o gausspol.o sym2poly.o threaded.o tinymt32.o gl2ps.o /usr/64/local/lib/libntl.a  /usr/64/local/lib/libpari.a /usr/64/local/lib/libmpfr.a /usr/64/local/lib/libcocoa.a -lgmp /usr/64/local/lib/libfltk_images.a /usr/64/local/lib/libfltk.a /usr/64/local/lib/libfltk_gl.a /usr/64/local/lib/libfltk_forms.a /usr/64/local/lib/libfltk_png.a /usr/64/local/lib/libfltk_jpeg.a /usr/64/local/lib/libgsl.a /usr/64/local/lib/libgslcblas.a /usr/64/local/lib/libreadline.a /usr/64/local/lib/libhistory.a /usr/64/local/lib/libintl.a /usr/64/local/lib/libgettextpo.a -liconv -lncurses -lm -lz -L/usr/64/local/lib/ -dynamiclib -framework AGL -framework OpenGL -framework ApplicationServices -lpthread -framework Cocoa -framework Accelerate  -o libjavagiac.jnilib
// 64 bits dynamic: g++ -m64 -fPIC -c giac_wrap.cxx  -I/System/Library/Frameworks/JavaVM.framework/Headers -I/System/Library/Frameworks/JavaVM.framework/Headers &&  g++ -m64 -shared giac_wrap.o -L.libs -lgiac -dynamiclib -framework JavaVM  -o libjavagiac.jnilib
// or link with .libs/libgiac.a -lmpfr -lntl -lgmp -lcocoa -lpari -llapack -lblas -lgsl -lgslcblas -lintl -lpng -lz
/* File : giac.i 
   Interface for giac using swig
   Assumes gen are stored on 64 bits
 */
%module giac

%{
#include "giac.h"
%}

%exception eval {
 try { $action } catch (std::runtime_error &e) {
   std::cout << "An exception occurred in eval: " << e.what() << "\n";
 }
}
%exception _eval {
 try { $action } catch (std::runtime_error &e) {
   std::cout << "An exception occurred in _eval: " << e.what() << "\n";
 }
}


%javaconst(1);
namespace giac {
  enum gen_unary_types {
    // immediate type (without mem allocation) should be < _ZINT
    _INT_= 0, // int val
    _DOUBLE_= 1, // double _DOUBLE_val
    // all type below or equal to _DOUBLE_ must be non pointers
    _ZINT= 2, // mpz_t * _ZINTptr
    _REAL= 3, // mpf_t * _REALptr
    // all type strictly below _CPLX must be real types
    _CPLX= 4, // gen * _CPLXptr
    _POLY= 5, // polynome * _POLYptr
    _IDNT= 6, // identificateur * _IDNTptr
    _VECT= 7, // vecteur * _VECTptr
    _SYMB= 8, // symbolic * _SYMBptr
    _SPOL1= 9, // sparse_poly1 * _SPOL1ptr
    _FRAC= 10, // fraction * _FRACptr
    _EXT= 11, // gen * _EXTptr
    _STRNG= 12, // string * _STRNGptr
    _FUNC= 13, // unary_fonction_ptr * _FUNCptr
    _ROOT= 14, // real_complex_rootof *_ROOTptr
    _MOD= 15, // gen * _MODptr
    _USER= 16, // gen_user * _USERptr
    _MAP=17, // map<gen.gen> * _MAPptr
    _EQW=18, // eqwdata * _EQWptr
    _GROB=19, // grob * _GROBptr
    _POINTER_=20, // void * _POINTER_val
    _FLOAT_=21 // immediate, _FLOAT_val
  } ;

  enum gen_comp_subtypes {
    _SEQ__VECT=1,
    _SET__VECT=2,
    _RPN_FUNC__VECT=3,
    _RPN_STACK__VECT=4,
    _GROUP__VECT=5,
    _LINE__VECT=6,
    _VECTOR__VECT=7,
    _PNT__VECT=8,
    _CURVE__VECT=8,
    _HALFLINE__VECT=9,
    _POLY1__VECT=10,
    _MATRIX__VECT=11,
    _RUNFILE__VECT=12,
    _ASSUME__VECT=13,
    _SPREAD__VECT=14,
    _CELL__VECT=15,
    _EQW__VECT=16,
    _HIST__VECT=17,
    _TILIST__VECT=0,
    _FOLDER__VECT=18,
    _SORTED__VECT=19,
    _POINT__VECT=20,
    _POLYEDRE__VECT=21,
    _RGBA__VECT=22,
    _LIST__VECT=23,
    _LOGO__VECT=24
  } ;

}
%include "std_vector.i"
%include "std_string.i"

namespace std {
  %template(vectori) vector<int>;
  %template(vectord) vector<double>;
  %template(vectorg) vector<giac::gen>;
  %template(vectors) vector<std::string>;
};

namespace giac {

  class context {
  public:
    giac::sym_tab * tabptr ;
    context * globalcontextptr ;
    context * previous ;
    giac::global * globalptr; 
    const context * parent;
    giac::vecteur * quoted_global_vars;
    giac::vecteur * history_in_ptr, * history_out_ptr;
    context();
    context(const context & c);
#ifndef RTOS_THREADX
#ifndef BESTA_OS
    context(const std::string & name);
#endif
#endif
    ~context();
    context * clone() const;
  };

  class gen {
  public:
#ifdef GIAC_TYPE_ON_8BITS
    unsigned char type;  // see dispatch.h
#else
    unsigned char type:5;  // 32 types is enough, keep 3 bits more for double
    unsigned char type_unused:3; 
#endif
    signed char subtype;
    unsigned short reserved; // used if SMARTPTR is defined on 64 bit CPU (16 bits for pointer val)
    int val;
  
    inline volatile int & ref_count() const { 
#ifdef SMARTPTR64
      return ((ref_mpz_t *) ((* (longlong *) (this))>>16))->ref_count;
#else
      return __ZINTptr->ref_count;
#endif
    }
    gen(): type(_INT_),subtype(0),val(0) {
#ifdef COMPILE_FOR_STABILITY
      control_c();
#endif
    };
#ifdef SMARTPTR64
    gen(void *ptr,short int subt)  {
#ifdef COMPILE_FOR_STABILITY
      control_c();
#endif
      longlong __POINTERptr = (longlong ) new ref_void_pointer(ptr); 
#ifndef NO_STDEXCEPT
      if (__POINTERptr & 0xffff000000000000)
	setsizeerr(gettext("Pointer out of range"));
#endif
      * ((longlong *) this) = __POINTERptr << 16;
      subtype=subt;
      type=_POINTER_;
    };
#else
    gen(void *ptr,short int subt): type(_POINTER_),subtype(char(subt)) {
#ifdef COMPILE_FOR_STABILITY
      control_c();
#endif
      __POINTERptr=new ref_void_pointer(ptr); 
    };
#endif
    gen(int i): type(_INT_),subtype(0),val(i) {
#ifdef COMPILE_FOR_STABILITY
      control_c();
#endif
    };
    gen(size_t i): type(_INT_),subtype(0),val((int)i)  {
#ifdef COMPILE_FOR_STABILITY
      control_c();
#endif
    };
    gen(longlong i);
#ifdef INT128
    gen(int128_t i);
#endif
#ifdef DOUBLEVAL
    gen(double d): type(_DOUBLE_),_DOUBLE_val(d) {};
#else
    // Warning this does not work on ia64 with -O2
    gen(double d) { *((double *) this) = d; type=_DOUBLE_; };
#endif
    gen(const giac_float & f);
#ifdef BCD
    gen(accurate_bcd_float * b);
#endif
    // inline
    double DOUBLE_val() const ;
    giac_float FLOAT_val() const ;
    gen(int a,int b);
    gen(double a,double b);
    gen(const gen & a,const gen & b);
    gen(const std::complex<double> & c);
    gen(const gen & e);
    gen (const giac::identificateur & s);
    gen (giac::ref_identificateur * sptr);
    gen (const giac::vecteur & v,short int s=0);
    gen (giac::ref_vecteur * vptr,short int s=0); 
    // vptr must be a pointer allocated by new, do not delete it explicitly
    gen (const giac::symbolic & s);
    gen (giac::ref_symbolic * sptr);
    gen (const giac::gen_user & g);
    gen (const giac::real_object & g);
    // Pls do not use this constructor unless you know exactly what you do
    gen (giac::Tref_tensor<gen> * pptr);
    gen (const giac::polynome & p);
    gen (const giac::fraction & p);
    gen (const std::string & s,giac::context * contextptr);
    // gen (const wchar_t * s,giac::context * contextptr);
    // gen (const char * s,giac::context * contextptr);
    // gen (const giac::sparse_poly1 & p);
    gen (const giac::unary_function_ptr & f,int nargs=1);
    // gen (const giac::unary_function_ptr * f,int nargs=1);
    gen (const giac::gen_map & m);
    gen (const giac::eqwdata & );
    gen (const giac::grob & );
#ifdef HAVE_GMPXX_H
    gen (const giac::mpz_class &);
#endif
    gen (const giac::my_mpz &);
    ~gen();
    inline mpz_t * ref_ZINTptr() const ;
    inline giac::real_object * ref_REALptr() const ;
    inline giac::gen * ref_CPLXptr() const ;
    inline giac::identificateur * ref_IDNTptr() const ;
    inline giac::symbolic * ref_SYMBptr() const ;
    inline giac::gen * ref_MODptr () const ;
    inline giac::Tfraction<gen> * ref_FRACptr() const ;
    inline giac::gen * ref_EXTptr () const ;
    inline giac::polynome * ref_POLYptr() const ;
    inline giac::vecteur * ref_VECTptr() const ;
    inline giac::sparse_poly1 * ref_SPOL1ptr() const ;
    inline std::string * ref_STRNGptr() const ;
    inline giac::unary_function_ptr * ref_FUNCptr() const ;
    inline giac::gen_user * ref_USERptr() const ;
    inline giac::gen_map * ref_MAPptr() const ;
    inline giac::eqwdata * ref_EQWptr() const ;
    inline giac::grob * ref_GROBptr() const ;
    inline void * ref_POINTER_val() const ;

    bool in_eval(int level,gen & evaled,const giac::context * contextptr) const;
    gen eval(int level,const giac::context * contextptr) const;
    // inline gen eval() const { return eval(DEFAULT_EVAL_LEVEL,context0); }
    bool in_evalf(int level,gen & evaled,const giac::context * contextptr) const;
    gen evalf(int level,const giac::context * contextptr) const;
    // inline gen evalf() const { return evalf(DEFAULT_EVAL_LEVEL,context0); }
    gen evalf_double(int level,const giac::context * contextptr) const ;
    gen evalf2double(int level,const giac::context * contextptr) const;
    %rename(operator_equal) gen::operator =;
    // gen & operator = (const gen & a);
    int to_int() const ;
    bool is_real(giac::context * contextptr) const ;
    bool is_cinteger() const ;
    bool is_integer() const ;
    bool is_constant() const;
    std::string print(giac::context * contextptr) const;
    const char * printcharptr() const ;
    // if sptr==0, return length required, otherwise print at end of *sptr
    int sprint(std::string * sptr,giac::context * contextptr) const; 
    std::string print_universal(giac::context * contextptr) const;
    std::string print() const;
    wchar_t * wprint(giac::context * contextptr) const ; 
    // print then convert to a malloc-ated wchar_t *
    void modify(int i) { *this =gen(i); };
    void dbgprint() const; 
    void uncoerce() ;
    gen conj(giac::context * contextptr) const;
    gen re(giac::context * contextptr) const ;
    gen im(giac::context * contextptr) const ;
    gen inverse(giac::context * contextptr) const;
    gen squarenorm(giac::context * contextptr) const;
    int bindigits() const ;
    // gen operator [] (int i) const ;
    // gen operator [] (const gen & i) const;
    gen operator_at(int i,giac::context * contextptr) const;
    gen operator_at(const gen & i,giac::context * contextptr) const;
    // gen & operator [] (int i) ;
    // gen & operator [] (const gen & i) ;
    %rename(operator_of) operator () (const gen &,giac::context *) const;
    gen operator () (const gen & i,giac::context * contextptr) const;
    // gen operator () (const gen & i,const gen & progname,giac::context * contextptr) const;
    bool islesscomplexthan(const gen & other) const;
    bool is_approx() const ; // true if double/real or cmplx with re/im
    int symb_size() const;
    gen change_subtype(int newsubtype);
    bool is_symb_of_sommet(const giac::unary_function_ptr & u) const ;
    // bool is_symb_of_sommet(const giac::unary_function_ptr * u) const ;
    gen makegen(int i) const; // make a gen of same type as this with integer i
  };
  giac::vecteur makevecteur(const gen & a);
  giac::vecteur makevecteur(const gen & a,const gen & b);
  giac::vecteur makevecteur(const gen & a,const gen & b,const gen & c);
  giac::vecteur makevecteur(const gen & a,const gen & b,const gen & c,const gen & d);
  giac::vecteur makevecteur(const gen & a,const gen & b,const gen & c,const gen & d,const gen & e);
  giac::vecteur makevecteur(const gen & a,const gen & b,const gen & c,const gen & d,const gen & e,const gen & f);
  giac::vecteur makevecteur(const gen & a,const gen & b,const gen & c,const gen & d,const gen & e,const gen & f,const gen & g);
  giac::vecteur makevecteur(const gen & a,const gen & b,const gen & c,const gen & d,const gen & e,const gen & f,const gen & g,const gen & h);
  giac::vecteur makevecteur(const gen & a,const gen & b,const gen & c,const gen & d,const gen & e,const gen & f,const gen & g,const gen & h,const gen & i);

  gen _factor(const gen & g,giac::context * contextptr);
  gen _simplify(const gen & g,giac::context * contextptr);
  gen _size(const gen & g,giac::context * contextptr);
  %rename(add) operator + (const gen &,const gen &);
  gen operator + (const gen & a,const gen & b);
  %rename(sub) operator - (const gen &,const gen &);
  gen operator - (const gen & a,const gen & b);
  %rename(neg) operator - (const gen &);
  gen operator - (const gen & a);
  %rename(mul) operator * (const gen &,const gen &);
  gen operator * (const gen & a,const gen & b);
  gen rdiv(const gen & a,const gen & b); // rational division
  %rename(mod) operator % (const gen &,const gen &);
  gen operator %(const gen & a,const gen & b); // for int only
  gen pow(const gen & base,const gen & exponent,giac::context *);
  gen giac_pow(const gen & base,const gen & exponent,giac::context *);
  gen iquo(const gen & a,const gen & b); // same
  gen irem(const gen & a,const gen & b,gen & q); // same
  gen smod(const gen & a,const gen & b); // same
  void smod(const giac::vecteur & v,const gen & g,giac::vecteur & w); 
  giac::vecteur smod(const giac::vecteur & a,const gen & b); // same
  // gen inv(const gen & a);
  gen inv(const gen & a,giac::context *);
  bool operator_equal(const gen & a,const gen & b,giac::context *);
  gen equal(const gen & a,const gen &b,giac::context *);
  int fastsign(const gen & a,giac::context *);   // 0 if unknown, 1 if >0, -1 if <0
  gen sign(const gen & a,giac::context *);
  bool is_greater(const gen & a,const gen &b,giac::context *);
  bool is_strictly_greater(const gen & a,const gen &b,giac::context *);
  bool is_positive(const gen & a,giac::context *);
  bool is_strictly_positive(const gen & a,giac::context *);
  // Large tests if strictly not precised, if sign is unknown make an error
  bool ck_is_greater(const gen & a,const gen &b,giac::context *);
  bool ck_is_strictly_greater(const gen & a,const gen &b,giac::context *);
  bool ck_is_positive(const gen & a,giac::context *);
  bool ck_is_strictly_positive(const gen & a,giac::context *);
  gen superieur_strict(const gen & a,const gen & b,giac::context *);
  gen superieur_egal(const gen & a,const gen & b,giac::context *);
  gen inferieur_strict(const gen & a,const gen & b,giac::context *);
  gen inferieur_egal(const gen & a,const gen & b,giac::context *);
  bool symb_size_less(const gen & a,const gen & b);

  gen min(const gen & a, const gen & b,giac::context *);
  gen max(const gen & a, const gen & b,giac::context *);
  // default context0 is required for instantiation in poly.h
  gen factorial(unsigned long int i);
  gen comb(unsigned long int i,unsigned long j);
  gen perm(unsigned long int i,unsigned long j);
  gen pow(const gen & base, unsigned long int exponent);
  gen pow(const gen & base, int exponent);
  gen pow(unsigned long int base, unsigned long int exponent);

  // more advanced arithmetic
  gen gcd(const gen & A,const gen & B);
  gen lcm(const gen & a,const gen & b);
  gen simplify(gen & n, gen & d);
  void egcd(const gen &a,const gen &b, gen & u,gen &v,gen &d );
  gen ichinrem(const gen & a,const gen &b,const gen & amod, const gen & bmod);
  gen invmod(const gen & A,const gen & modulo);
  gen fracmod(const gen & a_orig,const gen & modulo); // -> p/q=a mod modulo
  bool fracmod(const gen & a_orig,const gen & modulo,gen & res);
  gen powmod(const gen &base,const gen & expo,const gen & modulo);
  gen isqrt(const gen & A);
  gen re(const gen & a,giac::context *);
  gen no_context_re(const gen & a);
  gen im(const gen & a,giac::context *);
  gen no_context_im(const gen & a);
  void reim(const gen & g,gen & r,gen & i,giac::context *);
  gen conj(const gen & a,giac::context *);
  gen no_context_conj(const gen & a);
  gen sq(const gen & a);
  gen abs(const gen & a,const context * contextptr=context0);
  // default context0 is required for instantiation in poly.h
  gen linfnorm(const gen & a,const context * contextptr=context0);
  // default context0 is required for instantiation in poly.h
  gen arg(const gen & a,giac::context *);
  gen arg_CPLX(const gen & a,giac::context *);
  int is_perfect_square(const gen & A);
  int is_probab_prime_p(const gen & A);
  gen nextprime(const gen & a); // more precisely next probably prime
  gen prevprime(const gen & a); // more precisely prev probably prime
  int jacobi(const gen & A, const gen &B);
  int legendre(const gen & A, const gen & B);
  giac::vecteur pascal_next_line(const giac::vecteur & v); 
  giac::vecteur pascal_nth_line(int n);
  // convert a __VECTOR__VECT vecteur to a normal vecteur
  gen vector2vecteur(const giac::vecteur & v);

  // if b is a _MOD, returns a as a b _MOD 
  gen chkmod(const gen& a,const gen & b);
  // make a _MOD a%b
  gen makemod(const gen & a,const gen & b);
  // same without evaluating %
  gen makemodquoted(const gen & a,const gen & b);

  // from a sum in x returns a list of [coeff monomial]
  // e.g. 5+2x+3*x*y -> [ [5 1] [2 x] [ 3 x*y] ]
  giac::vecteur symbolique2liste(const gen & x,giac::context *);
  // v should be sorted and shrinked
  gen liste2symbolique(const giac::vecteur & v);

  bool is_atomic(const gen & e);
  gen string2gen(const std::string & ss,bool remove_ss_quotes=true);
  // gen eval_VECT(const giac::vecteur & v,int subtype,int level,const context * context_ptr );
  gen no_context_evalf(const gen & e);
  gen evalf(const gen & e,int level,const context * contextptr );
  gen evalf2bcd_nock(const gen & g0,int level,const context * contextptr);
  gen evalf2bcd(const gen & g0,int level,const context * contextptr);
  // return true if g can be converted to a double or real or complex
  bool has_evalf(const gen & g,gen & res,int level,const context * contextptr);
  double int2double(int i);
  gen aplatir_fois_plus(const gen & g);
  gen collect(const gen & g,giac::context *);

  gen select_root(const giac::vecteur & v,giac::context * );
  bool is_known_rootof(const giac::vecteur & v,gen & symroot,giac::context * );
  gen alg_evalf(const gen & a,const gen &b,giac::context * );
  gen approx_rootof(const gen & e,giac::context * );
  gen common_EXT(gen & a,gen & b,const giac::vecteur * l,giac::context * );
  gen common_minimal_POLY(const gen & ga,const gen & gb, gen & a,gen & b,int &k,giac::context * );
  gen ext_add(const gen & a,const gen & b,giac::context * );
  gen ext_sub(const gen & a,const gen & b,giac::context * );
  gen ext_mul(const gen & a,const gen & b,giac::context * );
  gen symb_rootof(const gen & p,const gen &pmin,giac::context * );
  gen rootof(const gen & e,giac::context * );
  giac::vecteur sturm(const gen &g,const gen & x,giac::context * );
  int sturmab(const gen & g,const gen &x,const gen & a,const gen & b,giac::context * );
  gen _sturmab(const gen & g_orig,giac::context * );
  gen _sturm(const gen & g,giac::context * );
  gen _sturmseq(const gen & g,giac::context * );
  int sturmsign(const gen & a,bool strict,giac::context * );
  int find_range(const gen & g,giac::vecteur & a,giac::context * );
  gen fminmax(const gen & g,int minmax,giac::context * );
  gen _complexroot(const gen & g,giac::context * );
  gen _realroot(const gen & g,giac::context * );
  gen _crationalroot(const gen & g,giac::context * );
  gen _rationalroot(const gen & g,giac::context * );
  giac::vecteur symb2poly_num(const gen & g,giac::context * );
  gen eval_before_diff(const gen & expr,const gen & variable,giac::context * );
  gen derive(const gen & e,const giac::identificateur & i,giac::context * );
  gen derive(const gen & e,const gen & vars,giac::context * );
  gen derive(const gen & e,const gen & vars,const gen & nderiv,giac::context * );
  gen _derive(const gen & args,giac::context * );
  gen _function_diff(const gen & g,giac::context * );
  gen _grad(const gen & args,giac::context * );
  gen laplace(const gen & f,const gen & x,const gen & s,giac::context * );
  gen _laplace(const gen & args,giac::context * );
  gen diffeq_constante(int i,giac::context * );
  gen ilaplace(const gen & f,const gen & x,const gen & s,giac::context * );
  gen _ilaplace(const gen & args,giac::context * );
  gen _desolve(const gen & args,giac::context * );
  gen ztrans(const gen & f,const gen & x,const gen & s,giac::context * );
  gen _ztrans(const gen & args,giac::context * );
  gen invztrans(const gen & f,const gen & x,const gen & s,giac::context * );
  gen _invztrans(const gen & args,giac::context * );
  gen integrate_without_lnabs(const gen & e,const gen & x,giac::context * );
  gen _ezgcd(const gen & args,giac::context * );
  gen _modgcd(const gen & args,giac::context * );
  gen _heugcd(const gen & args,giac::context * );
  gen _psrgcd(const gen & args,giac::context * );
  giac::vecteur quad(int &b,const gen & q, const giac::vecteur & x,giac::context * );
  giac::vecteur qxa(const gen &q,const giac::vecteur & x,giac::context * );
  gen _q2a(const gen & args,giac::context * );
  giac::vecteur gauss(const gen & q,const giac::vecteur & x,giac::context * );
  gen _gauss(const gen & args,giac::context * );
  gen axq(const giac::vecteur &A,const giac::vecteur & x,giac::context * );
  gen _a2q(const gen & args,giac::context * );
  giac::vecteur qxac(const gen &q,const giac::vecteur & x,giac::context * );
  gen _conique_reduite(const gen & args,giac::context * );
  gen _quadrique_reduite(const gen & args,giac::context * );
  void settypeerr(giac::context * );
  void setsizeerr(giac::context * );
  void setdimerr(giac::context * );
  void divisionby0err(const gen &,giac::context * );
  void cksignerr(const gen &,giac::context * );
  void invalidserieserr(const std::string &,giac::context * );
  void toofewargs(const std::string & s,giac::context * );
  void toomanyargs(const std::string & s,giac::context * );
  void maxordererr(giac::context * );
  void setstabilityerr(giac::context * );
  gen gentypeerr(giac::context * );
  void gentypeerr(gen & g,giac::context * );
  gen gensizeerr(giac::context * );
  void gensizeerr(gen & g,giac::context * );
  gen gendimerr(giac::context * );
  void gendimerr(gen & g,giac::context * );
  gen gendivisionby0err(const gen &,giac::context * );
  gen gencksignerr(const gen &,giac::context * );
  gen geninvalidserieserr(const std::string &,giac::context * );
  gen gentoofewargs(const std::string & s,giac::context * );
  gen gentoomanyargs(const std::string & s,giac::context * );
  gen genmaxordererr(giac::context * );
  gen genstabilityerr(giac::context * );
  std::string print_the_type(int val,giac::context * );
  std::string printinner_VECT(const giac::vecteur & v, int subtype,giac::context * );
  std::string & add_printinner_VECT(std::string & s,const giac::vecteur &v,int subtype,giac::context * );
  std::string begin_VECT_string(int subtype,bool tex,giac::context * );
  std::string end_VECT_string(int subtype,bool tex,giac::context * );
  std::string print_VECT(const giac::vecteur & v,int subtype,giac::context * ); // subtype was 0 by default
  // std::string print_SPOL1(const giac::sparse_poly1 & p,giac::context * );
  std::string printint32(int val,int subtype,giac::context * );
  std::string print_FLOAT_(const giac_float & f,giac::context * );
  gen parsed_gen(giac::context * );
  void parsed_gen(const gen & g,giac::context * );
  unsigned archive_count(const gen & g,giac::context * );
  bool archive_save(void * f,const gen & g,giac::context * );
  gen archive_restore(FILE * f,giac::context * );
  gen _ithprime(const gen & args,giac::context * );
  gen _ifactors(const gen & args,giac::context * );
  gen _maple_ifactors(const gen & args,giac::context * );
  giac::vecteur ifactors(const gen & n0,giac::context * );
  gen ifactors(const gen & args,int maplemode,giac::context * );
  giac::vecteur factors(const gen & g,const gen & x,giac::context * );
  gen _factors(const gen & args,giac::context * );
  gen _divis(const gen & args,giac::context * );
  gen idivis(const gen & n,giac::context * );
  gen _idivis(const gen & args,giac::context * );
  giac::vecteur pfacprem(gen & n,bool addlast,giac::context * );
  gen ifactor(const gen & n,giac::context * );
  gen _ifactor(const gen & args,giac::context * );
  gen euler(const gen & e,giac::context * );
  gen _euler(const gen & args,giac::context * );
  gen pa2b2(const gen & p,giac::context * );
  gen _pa2b2(const gen & args,giac::context * );
  gen _propfrac(const gen & args,giac::context * );
  gen _iabcuv(const gen & args,giac::context * );
  gen abcuv(const gen & a,const gen & b,const gen & c,const gen & x,giac::context * );
  gen _abcuv(const gen & args,giac::context * );
  gen simp2(const gen & a,const gen & b,giac::context * );
  gen _simp2(const gen & args,giac::context * );
  gen _fxnd(const gen & args,giac::context * );
  int is_meromorphic(const gen & g,const gen & x,gen &a,gen &b,gen & P,giac::context * );
  int is_even_odd(const gen & f,const gen & x,giac::context * );
  gen residue(const gen & g,const gen & x,const gen & a,giac::context * );
  gen _residue(const gen & args,giac::context * );
  bool intgab(const gen & g,const gen & x,const gen & a,const gen & b,gen & res,giac::context * );
  giac::vecteur singular(const gen & g,const gen & x,giac::context * );
  gen _singular(const gen & args,giac::context * );
  gen complex_subst(const gen & e,const giac::vecteur & substin,const giac::vecteur & substout,giac::context * );
  gen complex_subst(const gen & e,const gen & x,const gen & newx,giac::context * );
  giac::vecteur lvarxwithinv(const gen &e,const gen & x,giac::context * );
  bool is_constant_wrt(const gen & e,const gen & x,giac::context * );
  bool is_linear_wrt(const gen & e,const gen &x,gen & a,gen & b,giac::context * );
  bool is_quadratic_wrt(const gen & e,const gen &x,gen & a,gen & b,gen & c,giac::context * );
  gen lnabs(const gen & x,giac::context * );
  gen surd(const gen & c,int n,giac::context * );
  gen _surd(const gen & args,giac::context * );
  gen invexptoexpneg(const gen& g,giac::context * );
  bool is_rewritable_as_f_of(const gen & fu,const gen & u,gen & fx,const gen & gen_x,giac::context * );
  bool intgab_ratfrac(const gen & e,const gen & x,gen & value,giac::context * );
  gen integrate_gen_rem(const gen & e, const gen & x, gen & remains_to_integrate,giac::context * );
  gen integrate_id_rem(const gen & e, const gen & x, gen & remains_to_integrate,giac::context * );
  gen linear_integrate(const gen & e,const gen & x,gen & remains_to_integrate,giac::context * );
  gen integrate_id(const gen & e,const giac::identificateur & x,giac::context * );
  gen integrate_gen(const gen & e,const gen & f,giac::context * );
  gen _integrate(const gen & args,giac::context * );
  double rombergo(const gen & f,const gen & x, const gen & a, const gen & b, int n,giac::context * );
  double rombergt(const gen & f,const gen & x, const gen & a, const gen & b, int n,giac::context * );
  gen _romberg(const gen & args,giac::context * );
  gen sum(const gen & e,const gen & x,gen & remains_to_sum,giac::context * );
  gen sum_loop(const gen & e,const gen & x,int i,int j,giac::context * );
  gen sum(const gen & e,const gen & x,const gen & a,const gen &b,giac::context * );
  gen _sum(const gen & args,giac::context * ) ;
  gen _Sum(const gen & args,giac::context * ) ;
  gen _bernoulli(const gen & args,giac::context * ) ;
  gen seqprod(const gen & g,int type,giac::context * );
  gen sum(const gen & e,const gen & x,gen & remains_to_sum,giac::context * );
  gen sum(const gen & e,const gen & x,const gen & a,const gen &b,giac::context * );
  gen _sum(const gen & args,giac::context * );
  gen sum_loop(const gen & e,const gen & x,int i,int j,giac::context * );
  gen _bernoulli(const gen & args,giac::context * );
  gen _odesolve(const gen & args,giac::context * );
  gen preval(const gen & f,const gen & x,const gen & a,const gen & b,giac::context * );
  gen _ibpdv(const gen & args,giac::context * );
  gen fourier_an(const gen & f,const gen & x,const gen & T,const gen & n,const gen & a,giac::context * );
  gen fourier_bn(const gen & f,const gen & x,const gen & T,const gen & n,const gen & a,giac::context * );
  gen fourier_cn(const gen & f,const gen & x,const gen & T,const gen & n,const gen & a,giac::context * );
  gen _fourier_an(const gen & args,giac::context * );
  gen _fourier_bn(const gen & args,giac::context * );
  gen _fourier_cn(const gen & args,giac::context * );
  gen _isom(const gen & args,giac::context * );
  gen _mkisom(const gen & args,giac::context * );
  giac::vecteur mkisom(const gen & n,int b,giac::context * );
  gen prod_expand(const gen & a,const gen & b,giac::context * );
  gen unlin(giac::vecteur & v,giac::context * );
  void convolution(const gen & coeff, const gen & arg,const giac::vecteur & w,giac::vecteur & res,giac::context * );
  void lin(const gen & e,giac::vecteur & v,giac::context * );
  gen _lin(const gen & e,giac::context * );
  gen lnexpand(const gen & e,giac::context * );
  gen tunlin(giac::vecteur & v,giac::context * );
  void tconvolution(const gen & coeff, const gen & arg,const giac::vecteur & w,giac::vecteur & res,giac::context * );
  void tlin(const gen & e,giac::vecteur & v,giac::context * );
  gen _tlin(const gen & e,giac::context * );
  gen _texpand(const gen & e,giac::context * );
  gen expand(const gen & e,giac::context * );
  gen ln_expand(const gen & e0,giac::context * );
  gen _texpand(const gen & args,giac::context * );
  gen expexpand(const gen & e,giac::context * );
  gen lnexpand(const gen & e,giac::context * );
  gen trigexpand(const gen & e,giac::context * );
  gen _about(const gen & g,giac::context * );
  gen _zip(const gen & args,giac::context * );
  gen _accumulate_head_tail(const gen & args,giac::context * );
  gen _divide(const gen & g,giac::context * );
  gen _ratnormal(const gen & g,giac::context * );
  gen _about(const gen & g,giac::context * );
  gen _inverse(const gen & a_orig,giac::context * );
  gen _Inverse(const gen & g,giac::context * );
  gen _igcdex(const gen & a_orig,giac::context * );
  gen _gcdex(const gen & a_orig,giac::context * );
  gen _revlist(const gen & a,giac::context * );
  gen _restart(const gen & args,giac::context * );
  gen _restart_modes(const gen & args,giac::context * );
  gen _time(const gen & a,giac::context * );
  gen _cat(const gen & a_orig,giac::context * );
  gen _pivot(const gen & a_orig,giac::context * );
  gen _rowspace(const gen & g,giac::context * );
  gen _colspace(const gen & g,giac::context * );
  gen _copy(const gen & g,giac::context * );
  gen _row(const gen & g,giac::context * );
  gen _col(const gen & g,giac::context * );
  gen _count_sup(const gen & args,giac::context * );
  gen _count_inf(const gen & args,giac::context * );
  gen _trunc(const gen & args,giac::context * );
  gen _evalc(const gen & g,giac::context * );
  gen _open(const gen & g,giac::context * );
  gen _fopen(const gen & g,giac::context * );
  gen _fprint(const gen & g,giac::context * );
  gen _close(const gen & g,giac::context * );
  gen _blockmatrix(const gen & g,giac::context * );
  gen _delcols(const gen & g,giac::context * );
  gen _delrows(const gen & g,giac::context * );
  gen _JordanBlock(const gen & g,giac::context * );
  gen _companion(const gen & g,giac::context * );
  gen _border(const gen & g,giac::context * );
  gen _pade(const gen & g,giac::context * );
  gen _lhs(const gen & g,giac::context * );
  gen _rhs(const gen & g,giac::context * );
  gen _reverse_rsolve(const gen & g,giac::context * );
  gen fft(const gen & g_orig,int direct,giac::context * );
  gen _fft(const gen & g,giac::context * );
  gen _ifft(const gen & g,giac::context * );
  gen _Resultant(const gen & g,giac::context * );
  gen _Nullspace(const gen & g,giac::context * );
  gen _assign(const gen & g,giac::context * );
  gen _implicitplot3d(const gen & g,giac::context * );
  gen _readwav(const gen & g,giac::context * );
  gen _writewav(const gen & g,giac::context * );
  gen _animate(const gen & g,giac::context * );
  gen _animate3d(const gen & g,giac::context * );
  gen _even(const gen & g,giac::context * );
  gen _odd(const gen & g,giac::context * );
  gen _writergb(const gen & g,giac::context * );
  gen _readrgb(const gen & g,giac::context * );
  gen product(const giac::polynome & P,const giac::vecteur & v,const gen & n,gen & remains,giac::context * );
  gen _seqsolve(const gen & args,giac::context * );
  gen _rsolve(const gen & args,giac::context * );
  gen _array(const gen & g,giac::context * );
  gen _makemod(const gen & args,giac::context * );
  gen _hexprint(const gen & g,giac::context * );
  gen _octprint(const gen & g,giac::context * );
  gen _binprint(const gen & g,giac::context * );
  std::string cprint(const gen & args,giac::context * );
  gen _mathml(const gen & g,giac::context * );
  gen _spread2mathml(const gen & g,giac::context * );
  std::string gen2mathml(const gen & e,giac::context * );
  std::string gen2mathml(const gen & e, std::string &svg,giac::context * );
  std::string gen2svg(const gen &e,giac::context * );
  gen _scalar_product(const gen & args,giac::context * );
  gen _compare(const gen & args,giac::context * );
  gen _preval(const gen & args,giac::context * );
  gen _lagrange(const gen & args,giac::context * );
  gen _reorder(const gen & args,giac::context * );
  gen _adjoint_matrix(const gen & args,giac::context * );
  gen _equal2diff(const gen & args,giac::context * );
  gen _equal2list(const gen & args,giac::context * );
  gen _rank(const gen & args,giac::context * );
  gen _csc(const gen & args,giac::context * );
  gen _cot(const gen & args,giac::context * );
  gen _acsc(const gen & args,giac::context * );
  gen _ibpu(const gen & args,giac::context * ) ;
  gen _changebase(const gen & args,giac::context * );
  gen _epsilon2zero(const gen & args,giac::context * );
  gen _suppress(const gen & args,giac::context * );
  gen _valuation(const gen & args,giac::context * );
  gen _degree(const gen & args,giac::context * );
  gen _lcoeff(const gen & args,giac::context * );
  gen _tcoeff(const gen & args,giac::context * );
  gen _sqrfree(const gen & args,giac::context * );
  gen _truncate(const gen & args,giac::context * );
  gen _canonical_form(const gen & args,giac::context * );
  gen _fcoeff(const gen & args,giac::context * );
  gen _froot(const gen & args,giac::context * );
  gen _roots(const gen & g,giac::context * );
  gen _divpc(const gen & args,giac::context * );
  gen _ptayl(const gen & args,giac::context * );
  gen _dfc(const gen & g_orig,giac::context * );
  gen _dfc2f(const gen & g,giac::context * );
  gen _float2rational(const gen & g,giac::context * );
  gen _gramschmidt(const gen & g,giac::context * );
  gen _pmin(const gen & g,giac::context * );
  gen _potential(const gen & g,giac::context * );
  gen _vpotential(const gen & g,giac::context * );
  gen _poly2symb(const gen & g,giac::context * );
  gen _symb2poly(const gen & g,giac::context * );
  gen _exp2trig(const gen & g,giac::context * );
  gen _nrows(const gen & g,giac::context * );
  gen _ncols(const gen & g,giac::context * );
  gen _l2norm(const gen & g0,giac::context * );
  gen _normalize(const gen & a,giac::context * );
  gen _lgcd(const gen & g,giac::context * );
  gen _float(const gen & g,giac::context * );
  gen _hold(const gen & g,giac::context * );
  gen _eigenvals(const gen & g,giac::context * );
  gen _Gcd(const gen & g,giac::context * );
  gen _Gcdex(const gen & g,giac::context * );
  gen _Factor(const gen & g,giac::context * );
  gen _Rref(const gen & g,giac::context * );
  gen _Rank(const gen & g,giac::context * );
  gen _Det(const gen & g,giac::context * );
  gen _Quo(const gen & g,giac::context * );
  gen _Rem(const gen & g,giac::context * );
  gen _Int(const gen & g,giac::context * );
  gen _divisors(const gen & g,giac::context * );
  gen _maxnorm(const gen & g0,giac::context * );
  gen _l1norm(const gen & g0,giac::context * );
  gen _dotprod(const gen & g,giac::context * );
  gen _diag(const gen & g,giac::context * );
  gen _input(const gen & args,giac::context * );
  gen _textinput(const gen & args,giac::context * );
  gen _primpart(const gen & g,giac::context * );
  gen _content(const gen & g,giac::context * );
  gen _coeff(const gen & g,giac::context * );
  gen _chrem(const gen & g,giac::context * );
  gen _genpoly(const gen & g,giac::context * );
  gen _median(const gen & g,giac::context * );
  gen _quartile1(const gen & g,giac::context * );
  gen _quartile3(const gen & g,giac::context * );
  gen _quantile(const gen & g,giac::context * );
  gen _quartiles(const gen & g,giac::context * );
  gen _moustache(const gen & g_orig,giac::context * );
  gen _mean(const gen & g,giac::context * );
  gen _stdDev(const gen & g,giac::context * );
  gen _stddev(const gen & g,giac::context * );
  gen _variance(const gen & g,giac::context * );
  gen _covariance_correlation(const gen & g,giac::context * );
  gen _covariance(const gen & g,giac::context * );
  gen _correlation(const gen & g,giac::context * );
  gen _interval2center(const gen & g,giac::context * );
  gen _linear_regression(const gen & g,giac::context * );
  gen _exponential_regression(const gen & g,giac::context * );
  gen _power_regression(const gen & g,giac::context * );
  gen regression_plot_attributs(const gen & g,giac::vecteur & attributs,bool & eq,bool & r,giac::context * );
  gen _linear_regression_plot(const gen & g,giac::context * );
  gen _exponential_regression_plot(const gen & g,giac::context * );
  gen _logarithmic_regression_plot(const gen & g,giac::context * );
  gen _power_regression_plot(const gen & g,giac::context * );
  gen _polynomial_regression(const gen & g,giac::context * );
  gen _polynomial_regression_plot(const gen & g,giac::context * );
  gen _logistic_regression(const gen & g,giac::context * );
  gen _logistic_regression_plot(const gen & g,giac::context * );
  gen _linear_interpolate(const gen & g,giac::context * );
  gen _parabolic_interpolate(const gen & g,giac::context * );
  gen _center2interval(const gen & g,giac::context * );
  gen _histogram(const gen & g,giac::context * );
  gen _cumulated_frequencies(const gen & g,giac::context * );
  gen _classes(const gen & g,giac::context * );
  gen _listplot(const gen & g,giac::context * );
  gen _scatterplot(const gen & g,giac::context * );
  gen _polygonplot(const gen & g,giac::context * );
  gen _polygonscatterplot(const gen & g,giac::context * );
  gen _diagramme_batons(const gen & g,giac::context * );
  gen _camembert(const gen & g,giac::context * );
  gen cross_prod(const gen & a,const gen & b,const gen & c,giac::context * );
  gen _convexhull(const gen & g,giac::context * );
  gen _simplex_reduce(const gen & g,giac::context * );
  gen _spline(const gen & g,giac::context * );
  gen _bitand(const gen & g,giac::context * );
  gen _bitor(const gen & g,giac::context * );
  gen _bitxor(const gen & g,giac::context * );
  gen _hamdist(const gen & g,giac::context * );
  gen _plotarea(const gen & g,giac::context * );
  gen _add_language(const gen & args,giac::context * );
  gen _remove_language(const gen & args,giac::context * );
  gen _show_language(const gen & args,giac::context * );
  gen _os_version(const gen & args,giac::context * );
  giac::vecteur gen2continued_fraction(const gen & g,int n,giac::context * );
  gen float2rational(double d_orig,double eps,giac::context * );
  gen _sec(const gen & args,giac::context * );
  gen _asec(const gen & args,giac::context * );
  gen _acsc(const gen & args,giac::context * );
  gen _csc(const gen & args,giac::context * );
  gen _acot(const gen & args,giac::context * );
  gen _cot(const gen & args,giac::context * );
  gen _horner(const gen & args,giac::context * );
  gen _moyal(const gen & args,giac::context * );
  gen _Airy_Ai(const gen & args,giac::context * );
  gen _Airy_Bi(const gen & args,giac::context * );
  gen _randNorm(const gen & args,giac::context * );
  gen _randexp(const gen & args,giac::context * );
  gen _UTPN(const gen & args,giac::context * );
  gen UTPC(const gen & n_orig,const gen & x0,giac::context * );
  gen _UTPC(const gen & args,giac::context * );
  gen UTPT(const gen & n_orig,const gen & x0,giac::context * );
  gen _UTPT(const gen & args,giac::context * );
  gen UTPF(const gen & num,const gen & den,const gen & x0,giac::context * );
  gen _UTPF(const gen & args,giac::context * );
  gen binomial(const gen & n,const gen & k,const gen & p,giac::context * );
  gen _binomial(const gen & args,giac::context * );
  gen binomial_cdf(const gen & n,const gen &p,const gen & x0,const gen & x,giac::context * );
  gen _binomial_cdf(const gen & args,giac::context * );
  gen binomial_icdf(const gen & n,const gen &p,const gen & x_orig,giac::context * );
  gen _binomial_icdf(const gen & args,giac::context * );
  gen poisson(const gen & m,const gen & k,giac::context * );
  gen _poisson(const gen & args,giac::context * );
  gen poisson_cdf(const gen & n,const gen & x,giac::context * );
  gen _poisson_cdf(const gen & args,giac::context * );
  gen poisson_icdf(const gen & m,const gen & t_orig,giac::context * );
  gen _poisson_icdf(const gen & args,giac::context * );
  gen _normald(const gen & g,giac::context * );
  gen _normal_cdf(const gen & args,giac::context * );
  gen _normal_icdf(const gen & args,giac::context * );
  gen student(const gen & n,const gen & x,giac::context * );
  gen _student(const gen & args,giac::context * );
  gen student_cdf(const gen & dof,const gen & x1,const gen & x2,giac::context * );
  gen _student_cdf(const gen & args,giac::context * );
  gen student_icdf(const gen & m,const gen & t_orig,giac::context * );
  gen _student_icdf(const gen & args,giac::context * );
  gen chisquare(const gen & n,const gen & x,giac::context * );
  gen _chisquare(const gen & args,giac::context * );
  gen chisquare_cdf(const gen & dof,const gen & x1,const gen & x2,giac::context * );
  gen _chisquare_cdf(const gen & args,giac::context * );
  gen chisquare_icdf(const gen & m,const gen & t_orig,giac::context * );
  gen _chisquare_icdf(const gen & args,giac::context * );
  gen snedecor(const gen & a,const gen & b,const gen & x,giac::context * );
  gen _snedecor(const gen & args,giac::context * );
  gen snedecor_cdf(const gen & ndof,const gen & ddof,const gen & x,giac::context * );
  gen _snedecor_cdf(const gen & args,giac::context * );
  gen snedecor_icdf(const gen & num,const gen & den,const gen & t_orig,giac::context * );
  gen _snedecor_icdf(const gen & args,giac::context * );
  gen Beta(const gen & a,const gen& b,giac::context * );
  gen _Beta(const gen & args,giac::context * );
  gen Bessel(const gen & g,int kind,giac::context * );
  gen _BesselI(const gen & args,giac::context * );
  gen _BesselJ(const gen & args,giac::context * );
  gen _BesselK(const gen & args,giac::context * );
  gen _BesselY(const gen & args,giac::context * );
  gen _constants_catalog(const gen & g,giac::context * );
  // std::string pariprint(const gen & e,int varnum,giac::context * );
  // GEN gen2GEN(const gen & e,const giac::vecteur & vars,giac::context * );
  gen _pari(const gen & args,giac::context * );
  gen _trn(const gen & args,giac::context * );
  gen _sizes(const gen & args,giac::context * );
  gen _permuorder(const gen & args,giac::context * );
  gen _randperm(const gen & args,giac::context * );
  gen _is_permu(const gen & args,giac::context * );
  gen _is_cycle(const gen & args,giac::context * );
  gen _cycle2perm(const gen & args,giac::context * );
  gen _p1op2(const gen & args,giac::context * );
  gen _c1oc2(const gen & args,giac::context * );
  gen _c1op2(const gen & args,giac::context * );
  gen _p1oc2(const gen & args,giac::context * );
  gen _cycles2permu(const gen & args,giac::context * );
  gen _permu2cycles(const gen & args,giac::context * );
  gen _perminv(const gen & args,giac::context * );
  gen _cycleinv(const gen & args,giac::context * );
  gen _signature(const gen & args,giac::context * );
  gen _randperm(const gen & args,giac::context * );
  gen _hilbert(const gen & args,giac::context * );
  gen _hadamard(const gen & args,giac::context * );
  gen _trn(const gen & args,giac::context * );
  gen _syst2mat(const gen & args,giac::context * );
  gen _vandermonde(const gen & args,giac::context * );
  gen _laplacian(const gen & args,giac::context * );
  gen _hessian(const gen & args,giac::context * );
  gen _divergence(const gen & args,giac::context * );
  gen _curl(const gen & args,giac::context * );
  gen _groupermu(const gen & args,giac::context * );
  gen _nextperm(const gen & args,giac::context * );
  gen _prevperm(const gen & args,giac::context * );
  gen _split(const gen & args,giac::context * );
  gen _sum_riemann(const gen & args,giac::context * );
  gen _divergence(const gen &,giac::context * );  
  gen _hermite(const gen & args,giac::context * );
  gen _laguerre(const gen & args,giac::context * );
  gen _tchebyshev1(const gen & args,giac::context * );
  gen _tchebyshev2(const gen & args,giac::context * );
  gen _legendre(const gen & args,giac::context * );
  gen _curl(const gen & args,giac::context * );
  gen _permu2mat(const gen & args,giac::context * ); // permutation vector -> matrix
  giac::vecteur interpolyedre(const giac::vecteur & p,const gen & bb,giac::context * );
  giac::vecteur interdroitehyperplan(const gen & a,const gen &b,giac::context * );
  giac::vecteur interhyperplan(const gen & p1,const gen & p2,giac::context * );
  giac::vecteur interhypersurfacecurve(const gen & a,const gen &b,giac::context * ); 
  giac::vecteur inter2hypersurface(const gen & a,const gen &b,giac::context * );
  giac::vecteur interplansphere(const gen & a,const gen & b,giac::context * );
  gen hypersurface_equation(const gen & g,const giac::vecteur & xyz,giac::context * );
  gen _plot3d(const gen & args,giac::context * );
  gen _hypersurface(const gen & args,giac::context * );
  gen hypersurface_equation(const gen & g,const giac::vecteur & xyz,giac::context * );
  gen _hyperplan(const gen & args,giac::context * );
  gen _plan(const gen & args,giac::context * );
  gen _cone(const gen & args,giac::context * );
  gen _demi_cone(const gen & args,giac::context * );
  gen _cylindre(const gen & args,giac::context * );
  gen _perpendiculaire_commune(const gen & args,giac::context * );
  gen _polyedre(const gen & args,giac::context * );
  gen _prisme(const gen & args,giac::context * );
  gen _parallelepipede(const gen & args,giac::context * );
  gen _pyramide(const gen & args,giac::context * );
  gen _tetraedre_centre(const gen & args,giac::context * );
  gen _cube(const gen & args,giac::context * );
  gen _cube_centre(const gen & args,giac::context * );
  gen _octaedre(const gen & args,giac::context * );
  gen _icosaedre(const gen & args,giac::context * );
  gen _dodecaedre(const gen & args,giac::context * );
  gen _aretes(const gen & args,giac::context * );
  gen _faces(const gen & args,giac::context * );
  gen _hypersphere(const gen & args,giac::context * );
  gen _sphere(const gen & args,giac::context * );
  gen _quadrique(const gen & args,giac::context * );
  gen _est_cospherique(const gen & args,giac::context * );
  gen get_point(const gen & g,int n,giac::context * );
  gen _point3d(const gen & args,giac::context * );
  gen _point2d(const gen & args,giac::context * );
  gen mkrand2d3d(int dim,int nargs,gen (* f)(const gen &,const context *),giac::context * );
  gen droite_by_equation(const giac::vecteur & v,bool est_plan,giac::context * );
  bool point2abc(const gen & e,const gen & f,gen & a,gen & b,gen & c,giac::context * );
  gen abs_norm(const gen & g,giac::context * );
  gen abs_norm2(const gen & g,giac::context * );
  gen dotgiac::vecteur(const gen & a,const gen & b,giac::context * );
  giac::vecteur interpolygone(const giac::vecteur & p,const gen & bb,giac::context * );
  giac::vecteur interdroitecercle(const gen & a,const gen &b,giac::context * );
  giac::vecteur curveintercircle(const gen & curve,const gen &circle,bool iscircle,giac::context * );
  gen _avance(const gen & g,giac::context * );
  gen _recule(const gen & g,giac::context * );
  gen _position(const gen & g,giac::context * );
  gen _cap(const gen & g,giac::context * );
  gen _tourne_droite(const gen & g,giac::context * );
  gen _tourne_gauche(const gen & g,giac::context * );
  gen _leve_crayon(const gen & g,giac::context * );
  gen _baisse_crayon(const gen & g,giac::context * );
  gen _ecris(const gen & g,giac::context * );
  gen _signe(const gen & g,giac::context * );
  gen _saute(const gen & g,giac::context * );
  gen _pas_de_cote(const gen & g,giac::context * );
  gen _cache_tortue(const gen & g,giac::context * );
  gen _montre_tortue(const gen & g,giac::context * );
  gen _debut_enregistrement(const gen & g0,giac::context * );
  gen _fin_enregistrement(const gen & g0,giac::context * );
  gen _repete(const gen & g,giac::context * );
  gen _crayon(const gen & g,giac::context * );
  gen _efface(const gen & g,giac::context * );
  gen _vers(const gen & g,giac::context * );
  gen _rond(const gen & g,giac::context * );
  gen _disque(const gen & g,giac::context * );
  gen _disque_centre(const gen & g,giac::context * );
  gen _polygone_rempli(const gen & g,giac::context * );
  gen _rectangle_plein(const gen & g,giac::context * );
  gen _triangle_plein(const gen & g,giac::context * );
  gen _dessine_tortue(const gen & g,giac::context * );
  gen _arc(const gen & args,giac::context * );
  giac::vecteur plotpreprocess(const gen & args,giac::context * );
  bool chk_double_interval(const gen & g,double & inf,double & sup,giac::context * );
  void ck_parameter(const gen & ,giac::context * );
  gen _erase3d(const gen & args,giac::context * );
  void rewrite_with_t_real(gen & eq,const gen & t,giac::context * );
  bool on(const gen & e_orig,const gen & f,gen & t,giac::context * );
  gen plotcontour(const gen & f0,bool contour,giac::context * );
  gen _aire(const gen & args,giac::context * );
  gen _perimetre(const gen & args,giac::context * );
  gen _plotfunc(const gen &,giac::context * );
  gen _erase(const gen & args,giac::context * );
  gen _pixon(const gen & args,giac::context * );
  gen _pixoff(const gen & args,giac::context * );
  gen _droite(const gen & args,giac::context * );
  gen _slope(const gen & args,giac::context * );
  gen _demi_droite(const gen & args,giac::context * );
  gen _segment(const gen & args,giac::context * );
  gen symb_segment(const gen & x,const gen & y,const giac::vecteur & ,int ,giac::context * );
  gen symb_pnt_name(const gen & x,const gen & c,const gen & nom,giac::context * );
  gen symb_pnt(const gen & x,const gen & c,giac::context * );
  gen pnt_attrib(const gen & point,const giac::vecteur & attributs,giac::context * );
  gen symb_pnt(const gen & x,giac::context * );
  gen _pnt(const gen & args,giac::context * );
  gen _animation(const gen & args,giac::context * );
  gen _point(const gen & args,giac::context * );
  gen _affixe(const gen & args,giac::context * );
  gen _abscisse(const gen & args,giac::context * );
  gen _ordonnee(const gen & args,giac::context * );
  gen _cote(const gen & args,giac::context * );
  gen _coordonnees(const gen & args,giac::context * );
  gen _coordonnees_polaires(const gen & args,giac::context * );
  gen _coordonnees_rectangulaires(const gen & args,giac::context * );
  gen _point_polaire(const gen & args,giac::context * );
  gen _cercle(const gen & args,giac::context * );
  bool centre_rayon(const gen & cercle,gen & centre,gen & rayon,bool absrayon, giac::context * );
  gen _centre(const gen & args,giac::context * );
  gen _rayon(const gen & args,giac::context * );
  gen _milieu(const gen & args,giac::context * );
  gen _mediatrice(const gen & args,giac::context * );
  gen bissectrice(const gen & args,bool interieur,giac::context * );
  gen _bissectrice(const gen & args,giac::context * );
  gen _exbissectrice(const gen & args,giac::context * );
  gen _mediane(const gen & args,giac::context * );
  gen _circonscrit(const gen & args,giac::context * );
  gen _orthocentre(const gen & arg_orig,giac::context * );
  gen _inscrit(const gen & args,giac::context * );
  gen _exinscrit(const gen & args,giac::context * );
  gen _isobarycentre(const gen & args,giac::context * );
  gen _barycentre(const gen & args,giac::context * );
  gen perpendiculaire(const gen & args,bool suppl,giac::context * );
  gen _perpendiculaire(const gen & args,giac::context * );
  gen _orthogonal(const gen & args,giac::context * );
  gen _mediatrice(const gen & args,giac::context * );
  gen _parallele(const gen & args,giac::context * );
  gen distance2pp(const gen & ee,const gen & ff,giac::context * );
  gen distance2(const gen & f1,const gen & f2,giac::context * );
  gen _longueur2(const gen & args,giac::context * );
  // gen longueur(const gen & f1,const gen & f2,giac::context * );
  gen _longueur(const gen & args,giac::context * );
  // gen angle(const gen & f1,const gen & f2,giac::context * );
  gen _angle(const gen & args,giac::context * );
  gen scalar_product(const gen & a,const gen & b,giac::context * );
  gen projection(const gen & a,const gen & b,const gen & c,giac::context * );
  gen projection(const gen & e,const gen & p,giac::context * );
  gen parameter2point(const giac::vecteur & v,giac::context * );
  gen cercle2curve(const gen & f,giac::context * );
  giac::vecteur inter(const gen & a,const gen & b,giac::context * );
  gen _click(const gen & args,giac::context * );
  gen _element(const gen & args,giac::context * );
  gen _as_function_of(const gen & args,giac::context * );
  gen _lieu(const gen & args,giac::context * );
  gen _head(const gen & args,giac::context * );
  gen _tail(const gen & args,giac::context * );
  gen _sommets(const gen & args,giac::context * );
  gen _sommets_abca(const gen & args,giac::context * );
  gen _symetrie(const gen & args,giac::context * );
  gen _rotation(const gen & args,giac::context * );
  gen _projection(const gen & args,giac::context * );
  gen _homothetie(const gen & args,giac::context * );
  gen _est_coplanaire(const gen & args,giac::context * );
  gen _est_aligne(const gen & args,giac::context * );
  gen _est_cocyclique(const gen & args,giac::context * );
  gen _est_parallele(const gen & args,giac::context * );
  gen _est_perpendiculaire(const gen & args,giac::context * );
  gen _est_element(const gen & args,giac::context * );
  gen _inversion(const gen & args,giac::context * );
  gen _similitude(const gen & args,giac::context * );
  gen translation(const gen & a,const gen & bb,giac::context * );
  gen _translation(const gen & args,giac::context * );
  gen _curve(const gen & args,giac::context * );
  gen _plotparam(const gen & args,giac::context * );
  gen _plotpolar(const gen & args,giac::context * );
  gen _parameq(const gen & args,giac::context * );
  gen _equation(const gen & args,giac::context * );
  gen equation_homogene(const gen & eq,giac::context * );
  gen _tangent(const gen & args,giac::context * );
  gen _ellipse(const gen & args,giac::context * );
  gen _hyperbole(const gen & args,giac::context * );
  gen _parabole(const gen & args,giac::context * );
  gen _conique(const gen & args,giac::context * );
  gen _legende(const gen & args,giac::context * );
  gen _distanceat(const gen & args,giac::context * );
  gen _distanceatraw(const gen & args,giac::context * );
  gen _areaatraw(const gen & args,giac::context * );
  gen _areaat(const gen & args,giac::context * );
  gen _slopeatraw(const gen & args,giac::context * );
  gen _slopeat(const gen & args,giac::context * );
  gen _perimeterat(const gen & args,giac::context * );
  gen _perimeteratraw(const gen & args,giac::context * );
  gen _extract_measure(const gen & valeur,giac::context * );
  gen _angleat(const gen & args,giac::context * );
  gen _angleatraw(const gen & args,giac::context * );
  gen _couleur(const gen & args,giac::context * );
  gen _parameter(const gen & args,giac::context * );
  gen _hauteur(const gen & args,giac::context * );
  gen _triangle(const gen & args,giac::context * );
  gen _triangle_rectangle(const gen & args,giac::context * );
  gen _triangle_isocele(const gen & args,giac::context * );
  gen _triangle_equilateral(const gen & args,giac::context * );
  gen _parallelogramme(const gen & args,giac::context * );
  gen _isopolygone(const gen & args,giac::context * );
  gen _carre(const gen & args,giac::context * );
  gen _hexagone(const gen & args,giac::context * );
  gen _quadrilatere(const gen & args,giac::context * );
  gen _rectangle(const gen & args,giac::context * );
  gen _losange(const gen & args,giac::context * );
  gen _polygone(const gen & args,giac::context * );
  gen _polygone_ouvert(const gen & args,giac::context * );
  gen _bissectrice(const gen & args,giac::context * );
  gen _exbissectrice(const gen & args,giac::context * );
  gen _plotfield(const gen & args,giac::context * );
  gen _interactive_plotode(const gen & args,giac::context * );
  gen _plotode(const gen & args,giac::context * );
  gen archive_session(bool save_history,const std::string & s,giac::context * );
  gen unarchive_session_string(const std::string & s,int level, const gen & replace,giac::context * );
  // gen _archive(bool save_history,const gen & args,giac::context * );
  gen _unarchive(const gen & args,giac::context * );
  gen _xyztrange(const gen & args,giac::context * );
  gen _switch_axes(const gen & args,giac::context * );
  gen _plotseq(const gen & args,giac::context * );
  gen _plotimplicit(const gen & args,giac::context * );
  gen _plotcontour(const gen & args,giac::context * );
  gen _plotinequation(const gen & f0,giac::context * );
  gen _inter_droite(const gen & args,giac::context * );
  gen _dot_paper(const gen & args,giac::context * );
  gen _grid_paper(const gen & args,giac::context * );
  gen _triangle_paper(const gen & args,giac::context * );
  gen _line_paper(const gen & args,giac::context * );
  gen _bitmap(const gen & args,giac::context * );
  gen _Pictsize(const gen & args,giac::context * );
  gen _plot_style(const gen & args,giac::context * );
  gen _DrawInv(const gen & args,giac::context * );
  gen _Graph(const gen & g,giac::context * );
  gen _DrwCtour(const gen & g,giac::context * );
  int est_isocele(const gen & a,const gen & b,const gen & c,giac::context * );
  gen _est_isocele(const gen & args,giac::context * );
  bool est_equilateral(const gen & a,const gen & b,const gen & c,giac::context * );
  gen _est_equilateral(const gen & args,giac::context * );
  bool est_carre(const gen & a,const gen & b,const gen & c,const gen & d,giac::context * );
  gen _est_carre(const gen & args,giac::context * );
  int est_losange(const gen & a,const gen & b,const gen & c,const gen & d,giac::context * );
  gen _est_losange(const gen & args,giac::context * );
  int est_parallelogramme(const gen & a,const gen & b,const gen & c,const gen & d,giac::context * );
  gen _est_parallelogramme(const gen & args,giac::context * );
  int est_rect(const gen & a,const gen & b,const gen & c,const gen & d,giac::context * );
  gen _est_rectangle(const gen & args,giac::context * );
  gen _est_harmonique(const gen & args,giac::context * );
  gen _div_harmonique(const gen & args,giac::context * );
  gen _point_div(const gen & args,giac::context * );
  gen _birapport(const gen & args,giac::context * );
  gen _est_harmonique(const gen & args,giac::context * );
  gen _div_harmonique(const gen & args,giac::context * );
  gen _conj_harmonique(const gen & args,giac::context * );
  // gen _conj_harmoniques(const gen & args,giac::context * );
  gen _point_div(const gen & args,giac::context * );
  gen _birapport(const gen & args,giac::context * );
  gen _puissance(const gen & args,giac::context * );
  gen _axe_radical(const gen & args,giac::context * );
  gen _polaire(const gen & args,giac::context * );
  gen _pole(const gen & args,giac::context * );
  gen _polaire_reciproque(const gen & args,giac::context * );
  gen _est_orthogonal(const gen & args,giac::context * );
  gen _est_conjugue(const gen & args,giac::context * );
  gen _est_faisceau_cercle(const gen & args,giac::context * );
  gen _est_faisceau_droite(const gen & args,giac::context * );
  int est_faisceau_droite(const gen & a,const gen & b,const gen & c,giac::context * );
  gen _enveloppe(const gen & args,giac::context * );
  gen put_attributs(const gen & lieu_geo,const giac::vecteur & attributs,giac::context * );
  int est_aligne(const gen & a,const gen & b,const gen & c,giac::context * );
  bool est_coplanaire(const gen & a,const gen & b,const gen & c,const gen & d,giac::context * );
  bool est_cocyclique(const gen & a,const gen & b,const gen & c,const gen & d,giac::context * );
  bool est_parallele_giac::vecteur(const giac::vecteur & a,const giac::vecteur &b,gen & coeff,giac::context * );
  bool est_parallele(const gen & a,const gen & b,giac::context * );
  bool est_perpendiculaire(const gen & a,const gen & b,giac::context * );
  int est_element(const gen & a_orig,const gen & b_orig,giac::context * );
  bool est_carre(const gen & a,const gen & b,const gen & c,const gen & d,giac::context * );
  int est_isocele(const gen & a,const gen & b,const gen & c,giac::context * );
  bool est_equilateral(const gen & a,const gen & b,const gen & c,giac::context * );
  int est_trianglerect(const gen & a,const gen & b,const gen & c,giac::context * );
  bool est_orthogonal(const gen & c1,const gen & R1,const gen & c2,const gen & R2,giac::context * );
  bool est_harmonique(const gen & a,const gen & b,const gen & c,const gen & d,giac::context * );
  gen _vector(const gen & args,giac::context * );
  gen _hyperplan(const gen & args,giac::context * );
  gen _hypersphere(const gen & args,giac::context * );
  gen _hypersurface(const gen & args,giac::context * );
  gen _Ox_2d_unit_vector(const gen & args,giac::context * );
  gen _Oy_2d_unit_vector(const gen & args,giac::context * );
  gen _frame_2d(const gen & args,giac::context * );
  gen _Ox_3d_unit_vector(const gen & args,giac::context * );
  gen _Oy_3d_unit_vector(const gen & args,giac::context * );
  gen _Oz_3d_unit_vector(const gen & args,giac::context * );
  gen _frame_3d(const gen & args,giac::context * );
  void increment_instruction(const gen & arg,giac::context * );
  std::string check_local_assign(const gen & g,giac::context * );
  gen quote_program(const gen & args,giac::context * );
  gen _program(const gen & args,const gen & name,giac::context * );
  void adjust_sst_at(const gen & name,giac::context * ); //used in giac::symbolic.cc by nr_eval
  gen _bloc(const gen & prog,giac::context * );
  std::string printasfor(const gen & feuille,const char * sommetstr,giac::context * );
  std::string printasifte(const gen & feuille,const char * sommetstr,giac::context * );
  gen _ifte(const gen & e,giac::context * );
  gen _evalb(const gen & e,giac::context * );
  // gen _maple_if(const gen & args,giac::context * );
  gen _when(const gen & e,giac::context * );
  gen _for(const gen & e,giac::context * );
  gen _local(const gen & args,giac::context * );
  // gen _return(const gen & args,giac::context * );
  gen _try_catch(const gen & args,giac::context * );
  gen _check_type(const gen & args,giac::context * );
  gen _type(const gen & args,giac::context * );
  gen _nop(const gen & a,giac::context * );
  gen _feuille(const gen & args,giac::context * );
  gen _maple_op(const gen & args,giac::context * );
  gen _sommet(const gen & args,giac::context * );
  gen subsop(const gen & g,const giac::vecteur & v,giac::context * );
  gen subsop(const giac::vecteur & g,const giac::vecteur & v,const gen & sommet,giac::context * );
  gen _maple_subsop(const gen & args,giac::context * );
  gen _subsop(const gen & args,giac::context * );
  gen _append(const gen & args,giac::context * );
  gen _prepend(const gen & args,giac::context * );
  gen concat(const gen & g,bool glue_lines,giac::context * );
  gen _concat(const gen & args,giac::context * );
  gen _contains(const gen & args,giac::context * );
  gen _select(const gen & args,giac::context * );
  gen _remove(const gen & args,giac::context * );
  gen _option(const gen & args,giac::context * );
  gen _case(const gen & args,giac::context * );
  gen _rand(const gen & args,giac::context * );
  gen rand_interval(const giac::vecteur & v,bool entier,giac::context * );
  gen _srand(const gen & args,giac::context * );
  gen _char(const gen & args,giac::context * );
  gen _asc(const gen & args,giac::context * );
  gen _map(const gen & args,giac::context * );
  gen _apply(const gen & args,giac::context * );
  gen _makelist(const gen & args,giac::context * );
  gen _interval(const gen & args,giac::context * );
  gen _comment(const gen & args,giac::context * );
  gen _throw(const gen & args,giac::context * );
  gen _union(const gen & args,giac::context * );
  gen _intersect(const gen & args,giac::context * );
  gen _inter(const gen & args,giac::context * );
  gen _minus(const gen & args,giac::context * );
  gen _dollar(const gen & args,giac::context * );
  gen _makemat(const gen & args,giac::context * );
  gen _compose(const gen & args,giac::context * );
  gen _composepow(const gen & args,giac::context * );
  gen _has(const gen & args,giac::context * );
  gen _args(const gen & args,giac::context * );
  gen _lname(const gen & args,giac::context * );
  gen _halt(const gen & args,giac::context * );
  gen _kill(const gen & args,giac::context * );
  gen _cont(const gen & args,giac::context * );
  gen _sst(const gen & args,giac::context * );
  gen _sst_in(const gen & args,giac::context * );
  gen _debug(const gen & args,giac::context * );
  gen _watch(const gen & args,giac::context * );
  gen _rmwatch(const gen & args,giac::context * );
  gen _breakpoint(const gen & args,giac::context * );
  gen _rmbreakpoint(const gen & args,giac::context * );
  void debug_loop(gen &res,giac::context * );
  gen _backquote(const gen & args,giac::context * );
  gen _double_deux_points(const gen & args,giac::context * );
  gen _maple2mupad(const gen & args,giac::context * );
  gen _maple2xcas(const gen & args,giac::context * );
  gen _mupad2maple(const gen & args,giac::context * );
  gen _mupad2xcas(const gen & args,giac::context * );
  gen _cd(const gen & args,giac::context * );
  gen _pwd(const gen & args,giac::context * );
  gen _scientific_format(const gen & args,giac::context * );
  gen _integer_format(const gen & g,giac::context * );
  gen giac_eval_level(const gen & g,giac::context * ); // can not be declared as _eval_level, conflict
  gen _prog_eval_level(const gen & g,giac::context * );
  gen _with_sqrt(const gen & g,giac::context * );
  gen _xcas_mode(const gen & args,giac::context * );
  gen _all_trig_solutions(const gen & args,giac::context * );
  gen _ntl_on(const gen & args,giac::context * );
  gen _complex_mode(const gen & args,giac::context * );
  gen _angle_radian(const gen & args,giac::context * );
  gen _epsilon(const gen & args,giac::context * );
  gen _proba_epsilon(const gen & args,giac::context * );
  gen _complex_variables(const gen & args,giac::context * );
  gen _approx_mode(const gen & args,giac::context * );
  gen _threads(const gen & args,giac::context * );
  gen _threads_allowed(const gen & g,giac::context * );
  gen _mpzclass_allowed(const gen & g,giac::context * );
  gen _cas_setup(const gen & args,giac::context * );
  gen _Digits(const gen & args,giac::context * );
  gen _insmod(const gen & args,giac::context * );
  gen _xport(const gen & args,giac::context * );
  gen _rmmod(const gen & args,giac::context * );
  gen _lsmod(const gen & args,giac::context * );
  gen _virgule(const gen & args,giac::context * );
  gen _sort(const gen & args,giac::context * );
  gen _ans(const gen & args,giac::context * );
  gen _quest(const gen & args,giac::context * );
  gen _convert(const gen & args,giac::context * );
  gen _deuxpoints(const gen & args,giac::context * );
  gen quote_read(const gen & args,giac::context * ); // read in a file and return non evaled
  gen _read(const gen & args,giac::context * ); // read in a file and return evaled
  gen _write(const gen & args,giac::context * );
  gen _save_history(const gen & args,giac::context * );
  gen _findhelp(const gen & args,giac::context * );
  gen _member(const gen & args,giac::context * );
  gen _tablefunc(const gen & args,giac::context * );
  gen _tableseq(const gen & args,giac::context * );
  gen protecteval(const gen & g,int level,giac::context * );
  gen _unapply(const gen & args,giac::context * );
  gen _makevector(const gen & args,giac::context * );
  gen _matrix(const gen & args,giac::context * );
  gen _makesuite(const gen & args,giac::context * );
  gen _break(const gen & args,giac::context * );
  gen _continue(const gen & args,giac::context * );
  gen _label(const gen & args,giac::context * );
  gen _goto(const gen & args,giac::context * );
  gen _tilocal(const gen & args,giac::context * );
  gen inputform_post_analysis(const giac::vecteur & v,const gen & res,giac::context * );
  giac::vecteur inputform_pre_analysis(const gen & g,giac::context * );
  gen _inputform(const gen & args,giac::context * );
  gen _choosebox(const gen & args,giac::context * );
  gen _output(const gen & args,giac::context * );
  gen _input(const gen & args,bool textinput,giac::context * );
  gen _nop(const gen & args,giac::context * );
  std::string printastifunction(const gen & feuille,const char * sommetstr,giac::context * );
  gen _Dialog(const gen & args,giac::context * );
  gen _Title(const gen & args,giac::context * );
  gen _Text(const gen & args,giac::context * );
  gen _Request(const gen & args,giac::context * );
  gen _DropDown(const gen & args,giac::context * );
  gen _Popup(const gen & args,giac::context * );
  gen _expr(const gen & args,giac::context * );
  gen _string(const gen & args,giac::context * );
  gen _part(const gen & args,giac::context * );
  gen _Pause(const gen & args,giac::context * );
  gen _Row(const gen & args,giac::context * );
  gen _Col(const gen & args,giac::context * );
  // gen _DelVar(const gen & args,giac::context * );
  gen _pointprod(const gen & args,giac::context * );
  gen _pointdivision(const gen & args,giac::context * );
  gen _pointpow(const gen & args,giac::context * );
  gen _pourcent(const gen & args,giac::context * );
  gen _hash(const gen & args,giac::context * );
  gen _interactive(const gen & args,giac::context * );
  std::string printassuffix(const gen & feuille,const char * sommetstr,giac::context * );
  gen _ti_semi(const gen & args,giac::context * );
  gen widget_size(const gen & g,giac::context * );
  gen keyboard(const gen & g,giac::context * );
  gen current_sheet(const gen & g,giac::context * );
  gen window_switch(const gen & g,giac::context * );
  gen maple_lib(const gen & g,giac::context * );
  gen maple_root(const gen & g,giac::context * );
  gen symb_unit(const gen & a,const gen & b,giac::context * );
  std::string printasDigits(const gen & feuille,const char * sommetstr,giac::context * );
  gen user_operator(const gen & g,giac::context * );
  gen _SetFold(const gen & g,giac::context * );
  gen simplifier(const gen & g,giac::context * );
  gen _simplifier(const gen & g,giac::context * );
  gen mksa_reduce(const gen & g,giac::context * );
  gen find_or_make_symbol(const std::string & s,bool check38,giac::context * );
  giac::vecteur mksa_convert(const gen & g,giac::context * );
  gen _ufactor(const gen & g,giac::context * );
  gen _usimplify(const gen & g,giac::context * );
  gen _piecewise(const gen & g,giac::context * );
  gen when2piecewise(const gen & g,giac::context * );
  gen when2sign(const gen & g,giac::context * );
  gen piecewise2when(const gen & g,giac::context * );
  gen _geo2d(const gen & g,giac::context * );
  std::string printasinnerbloc(const gen & feuille,giac::context * );
  gen symb_local(const gen & a,const gen & b,giac::context * );
  gen symb_local(const gen & args,giac::context * );
  gen symb_check_type(const gen & args,giac::context * );
  gen _quaternion(const gen & args,giac::context * );
  gen risch(const gen & e_orig,const giac::identificateur & x,gen & remains_to_integrate,giac::context * );
  gen _risch(const gen & g,giac::context * );
  std::string printasconstant(const gen & feuille,const char * sommetstr,giac::context * );
  gen _rpn(const gen & args,giac::context * );
  gen _alg(const gen & args,giac::context * );
  gen _PERCENT(const gen & args,giac::context * );
  gen _ROLL(const gen & args,giac::context * );
  gen _ROLLD(const gen & args,giac::context * );
  gen _SWAP(const gen & args,giac::context * );
  gen _DUP(const gen & args,giac::context * );
  gen _OVER(const gen & args,giac::context * );
  gen _PICK(const gen & args,giac::context * );
  gen _DROP(const gen & args,giac::context * );
  gen _NOP(const gen & args,giac::context * );
  gen _IFTE(const gen & args,giac::context * );
  gen _RPN_LOCAL(const gen & args,giac::context * );
  gen _RPN_FOR(const gen & args,giac::context * );
  gen _RPN_WHILE(const gen & args,giac::context * );
  gen _RPN_UNTIL(const gen & args,giac::context * );
  gen _RPN_CASE(const gen & args,giac::context * );
  gen _RCL(const gen & args,giac::context * );
  gen _VARS(const gen & args,giac::context * );
  gen _purge(const gen & args,giac::context * );
  gen _rpn_prog(const gen & args,giac::context * );
  giac::vecteur rpn_eval(const gen & prog,giac::vecteur & pile,giac::context * );
  gen _division(const gen & args,giac::context * );
  gen _binary_minus(const gen & args,giac::context * );
  gen _hp38(const gen & args,giac::context * );
  gen _ABS(const gen & args,giac::context * );
  gen _MODULO(const gen & args,giac::context * );
  gen _RANDOM(const gen & g,giac::context * );
  gen _MAXREAL(const gen & g,giac::context * );
  gen _MINREAL(const gen & g,giac::context * );
  gen _EXPM1(const gen & g,giac::context * );
  gen _LNP1(const gen & g,giac::context * );
  gen _ADDROW(const gen & args,giac::context * );
  gen _ADDCOL(const gen & args,giac::context * );
  gen _SCALE(const gen & g,giac::context * );
  gen _SCALEADD(const gen & g,giac::context * );
  gen _SWAPCOL(const gen & args,giac::context * );
  gen _SUB(const gen & args,giac::context * );
  gen _RANDMAT(const gen & args,giac::context * );
  gen _REDIM(const gen & args,giac::context * );
  gen _REPLACE(const gen & args,giac::context * );
  gen _EIGENVAL(const gen & args,giac::context * );
  gen _EIGENVV(const gen & args,giac::context * );
  gen _SIZE(const gen& args,giac::context * );
  gen _INT(const gen & g,giac::context * );
  gen _HPDIFF(const gen & args,giac::context * );
  gen _HPINT(const gen & args,giac::context * );
  gen _HPSUM(const gen & args,giac::context * );
  gen _TAYLOR(const gen & args,giac::context * );
  gen _POLYFORM(const gen & args,giac::context * );
  gen _IS_LINEAR(const gen & args,giac::context * );
  gen _SVD(const gen & args0,giac::context * );
  gen _SVL(const gen & args0,giac::context * );
  gen _SPECRAD(const gen & args0,giac::context * );
  gen _SPECNORM(const gen & args0,giac::context * );
  gen _COND(const gen & args0,giac::context * );
  gen _rank(const gen & args,giac::context * );
  gen _SCHUR(const gen & args,giac::context * );
  gen _LQ(const gen & args0,giac::context * );
  gen _LU(const gen & args0,giac::context * );
  gen _QR(const gen & args0,giac::context * );
  gen _XPON(const gen & g,giac::context * );
  gen _MANT(const gen & g,giac::context * );
  gen _HMSX(const gen & g0,giac::context * );
  gen _XHMS(const gen & g0,giac::context * );
  gen _DEGXRAD(const gen & g,giac::context * );
  gen _RADXDEG(const gen & g,giac::context * );
  gen _PERCENT(const gen & g,giac::context * );
  gen _PERCENTCHANGE(const gen & g,giac::context * );
  gen _PERCENTTOTAL(const gen & g,giac::context * );
  gen _ITERATE(const gen & args,giac::context * );
  gen _MAKEMAT(const gen & args,giac::context * );
  gen _LSQ(const gen & args,giac::context * );
  gen _idivis(const gen & args0,giac::context * );
  gen _isprime(const gen & args0,giac::context * );
  gen _ithprime(const gen & args0,giac::context * );
  gen _euler(const gen & args0,giac::context * );
  gen _numer(const gen & args0,giac::context * );
  gen _denom(const gen & args0,giac::context * );
  gen _ifactors(const gen & args0,giac::context * );
  gen _binomial_icdf(const gen & args0,giac::context * );
  gen _poisson_icdf(const gen & args0,giac::context * );
  gen _NTHROOT(const gen & args,giac::context * );
  gen _Ans(const gen & args,giac::context * );
  // gen _EXPORT(const gen & args,giac::context * );
  gen _VIEWS(const gen & args,giac::context * );
  void qualify(gen & g,const giac::vecteur & v,const gen & prog,giac::context * );
  int seqapp_prepare(const gen & expr_un,gen & expr,giac::vecteur & vars,giac::context * ,int seqno=-1);
  // bool ptruncate(giac::sparse_poly1 & p,const gen & ordre,giac::context * );
  void lcmdeno(giac::vecteur &v,gen & e,giac::context * );
  gen series(const gen & e,const gen & vars,const gen & lim_point,const gen &ordre,giac::context * );
  gen _series(const gen & args,giac::context * );
  gen _revert(const gen & args,giac::context * );
  gen _bounded_function(const gen & args,giac::context * );
  gen bounded_function(giac::context * );
  gen limit(const gen & e,const giac::identificateur & x,const gen & lim_point,int direction,giac::context * );
  gen _limit(const gen & args,giac::context * );
  gen _bounded_function(const gen & args,giac::context * );
  gen bounded_function(giac::context * );
  gen _euler_mac_laurin(const gen & args,giac::context * );
  bool convert_to_euler_mac_laurin(const gen & g,const giac::identificateur &n,gen & res,giac::context * );
  giac::vecteur find_singularities(const gen & e,const giac::identificateur & x,int cplxmode,giac::context * );
  giac::vecteur solve(const gen & e,const giac::identificateur & x,int isolate_mode,giac::context * );
  giac::vecteur solve(const gen & e,const gen & x,int isolate_mode,giac::context * );
  void solve(const gen & e,const giac::identificateur & x,giac::vecteur &v,int isolate_mode,giac::context * );
  void in_solve(const gen & e,const giac::identificateur & x,giac::vecteur &v,int isolate_mode,giac::context * );
  bool modpolyroot(const giac::vecteur & a,const gen & p,giac::vecteur & v,bool dogcd,giac::context * );
  gen solvepostprocess(const gen & g,const gen & x,giac::context * );
  gen _solve(const gen & args,giac::context * );
  gen in_fsolve(giac::vecteur & v,giac::context * );
  gen _fsolve(const gen & args,giac::context * );
  gen _linsolve(const gen & args,giac::context * );
  gen _newton(const gen & args,giac::context * );
  gen _greduce(const gen & args,giac::context * );
  gen _gbasis(const gen & args,giac::context * );
  gen _in_ideal(const gen & args,giac::context * );
  giac::vecteur solvepreprocess(const gen & args,bool complex_mode,giac::context * );
  gen checkanglemode(giac::context * );
  gen degtorad(const gen & g,giac::context * );
  gen radtodeg(const gen & g,giac::context * );
  giac::vecteur subst(const giac::vecteur & v,const gen & i,const gen & newi,bool quotesubst,giac::context * );
  gen subst(const gen & e,const gen & i,const gen & newi,bool quotesubst,giac::context * );
  gen subst(const gen & e,const giac::vecteur & i,const giac::vecteur & ewi,bool quotesubst,giac::context * );
  gen quotesubst(const gen & e,const gen & i,const gen & newi,giac::context * );
  gen halftan(const gen & e,giac::context * );
  gen _halftan(const gen & args,giac::context * );
  gen shift_phase(const gen & e,giac::context * );
  gen _shift_phase(const gen & args,giac::context * );
  gen hyp2exp(const gen & e,giac::context * );
  gen _hyp2exp(const gen & args,giac::context * );
  gen sincos(const gen & e,giac::context * );
  gen _sincos(const gen & args,giac::context * );
  gen trig2exp(const gen & e,giac::context * );
  gen _trig2exp(const gen & args,giac::context * );
  gen halftan_hyp2exp(const gen & e,giac::context * );
  gen _halftan_hyp2exp(const gen & args,giac::context * );
  gen rewrite_hyper(const gen & e,giac::context * );
  gen asin2acos(const gen & e,giac::context * );
  gen _asin2acos(const gen & args,giac::context * );
  gen asin2atan(const gen & e,giac::context * );
  gen _asin2atan(const gen & args,giac::context * );
  gen acos2asin(const gen & e,giac::context * );
  gen _acos2asin(const gen & args,giac::context * );
  gen acos2atan(const gen & e,giac::context * );
  gen _acos2atan(const gen & args,giac::context * );
  gen atan2acos(const gen & e,giac::context * );
  gen _atan2acos(const gen & args,giac::context * );
  gen atan2asin(const gen & e,giac::context * );
  gen _atan2asin(const gen & args,giac::context * );
  giac::vecteur as_linear_combination(const gen & g,giac::vecteur & wrt,giac::context * );
  gen tsimplify_noexpln(const gen & e,int s1,int s2,giac::context * );
  gen tsimplify_common(const gen & e,giac::context * );
  gen tsimplify(const gen & e,giac::context * );
  gen _tsimplify(const gen & args,giac::context * );
  gen simplify(const gen & e,giac::context * );
  gen _simplify(const gen & args,giac::context * );
  gen trigcos(const gen & e,giac::context * );
  gen _trigcos(const gen & args,giac::context * );
  gen trigsin(const gen & e,giac::context * );
  gen _trigsin(const gen & args,giac::context * );
  gen trigtan(const gen & e,giac::context * );
  gen _trigtan(const gen & args,giac::context * );
  gen tan2sincos(const gen & e,giac::context * );
  gen _tan2sincos(const gen & args,giac::context * );
  gen tan2sincos2(const gen & e,giac::context * );
  gen _tan2sincos2(const gen & args,giac::context * );
  gen tan2cossin2(const gen & e,giac::context * );
  gen _tan2cossin2(const gen & args,giac::context * );
  gen tcollect(const gen & e,giac::context * );
  gen _tcollect(const gen & args,giac::context * );
  gen lncollect(const gen & e,giac::context * );
  gen _lncollect(const gen & args,giac::context * );
  gen _powexpand(const gen & args,giac::context * );
  gen powexpand(const gen & e,giac::context * );
  gen exp2pow(const gen & e,giac::context * );
  gen _exp2pow(const gen & args,giac::context * );
  gen _pow2exp(const gen & e,giac::context * );
  gen pow2expln(const gen & e,giac::context * );
  gen simplifyfactorial(const gen & g,giac::context * );
  gen pow2expln(const gen & e,const giac::identificateur & x,giac::context * );
  gen gamma2factorial(const gen & g,giac::context * );
  gen gammatofactorial(const gen & g,giac::context * );
  gen factorial2gamma(const gen & g,giac::context * );
  gen factorialtogamma(const gen & g,giac::context * );
  gen factor_xn(const gen & args,const gen & x,giac::context * );
  gen factor_xn(const gen & args,giac::context * );
  gen _factor_xn(const gen & args,giac::context * );
  gen Heavisidetosign(const gen & args,giac::context * );
  gen _Heavisidetosign(const gen & args,giac::context * );
  gen expln2trig(const gen & g,giac::context * );
  gen _mult_conjugate(const gen & g0,giac::context * );
  gen _mult_c_conjugate(const gen & g0,giac::context * );
  gen sin2tan2(const gen & e,giac::context * );
  gen cos2tan2(const gen & e,giac::context * );
  gen tan2tan2(const gen & e,giac::context * );
  gen sinh2exp(const gen & e,giac::context * );
  gen cosh2exp(const gen & e,giac::context * );
  gen tanh2exp(const gen & e,giac::context * );
  gen inv_test_exp(const gen & e,giac::context * );
  gen sin2exp(const gen & e,giac::context * );
  gen cos2exp(const gen & e,giac::context * );
  gen tan2exp(const gen & e,giac::context * );
  gen exp2sincos(const gen & e,giac::context * );
  gen tantosincos(const gen & e,giac::context * );
  gen tantosincos2(const gen & e,giac::context * );
  gen tantocossin2(const gen & e,giac::context * );
  gen asintoacos(const gen & e,giac::context * );
  gen acostoasin(const gen & e,giac::context * );
  gen asintoatan(const gen & e,giac::context * );
  gen atantoasin(const gen & e,giac::context * );
  gen acostoatan(const gen & e,giac::context * );
  gen atantoacos(const gen & e,giac::context * );
  gen trigcospow(const gen & g,giac::context * );
  gen trigsinpow(const gen & g,giac::context * );
  gen trigtanpow(const gen & g,giac::context * );
  gen powtopowexpand(const gen & g,giac::context * );
  gen exptopower(const gen & g,giac::context * );
  gen asin2ln(const gen & g_orig,giac::context * );
  gen acos2ln(const gen & g_orig,giac::context * );
  gen atan2ln(const gen & g_orig,giac::context * );
  bool guess_program(gen & g,giac::context * );
  gen normal(const gen & e,giac::context * ); // rational simplifications
  gen normal(const gen & e,bool distribute_div,giac::context * );
  gen normalize_sqrt(const gen & e,giac::context * );
  gen recursive_normal(const gen & e,giac::context * );  
  gen _recursive_normal(const gen & e,giac::context * );  
  gen recursive_normal(const gen & e,bool distribute_div,giac::context * );
  gen factor(const gen & e,bool withsqrt,giac::context * ); // full factorization (alg ext)
  gen ratfactor(const gen & e,bool withsqrt,giac::context * ); // full factorization (rat)
  gen factor(const gen & e,const gen & f,bool withsqrt,giac::context * );
  gen _factor(const gen & args,giac::context * );
  gen _collect(const gen & args,giac::context * );
  gen factorcollect(const gen & args,bool with_sqrt,giac::context * );
  gen partfrac(const gen & e,const giac::vecteur & l,bool withsqrt,giac::context * );
  gen partfrac(const gen & e,bool withsqrt,giac::context * ); 
  gen partfrac(const gen & e,const giac::identificateur & x,bool withsqrt,giac::context * ); 
  gen partfrac(const gen & e,const gen & f,bool withsqrt,giac::context * );
  gen _partfrac(const gen & args,giac::context * );
  gen _resultant(const gen & args,giac::context * );
  gen cklvar(const gen & e,giac::context * );
  gen ckalgvar(const gen & e,giac::context * );

  bool sym2r (const gen &e,const gen & iext,const giac::vecteur &l,const giac::vecteur & lv, const giac::vecteur & lvnum,const giac::vecteur & lvden, int l_size, gen & num,gen & den,giac::context * );
  bool sym2r (const gen &e,const giac::vecteur &l, int l_size, gen & num,gen & den,giac::context * );
  gen e2r(const gen & e,const giac::vecteur & l,giac::context * ); 
  gen e2r(const gen & e,const gen & x,giac::context * );
  gen _e2r(const gen & args,giac::context * );
  gen r2sym(const giac::polynome & p, const giac::vecteur & l,giac::context * );
  gen r2sym(const gen & p, const giac::vecteur & l,giac::context * );
  gen r2e(const gen & p,const giac::vecteur & l,giac::context * );
  gen r2e(const gen & r,const gen & x,giac::context * );
  gen _r2e(const gen & args,giac::context * );
  gen r2sym(const giac::fraction & f, const giac::vecteur & l,giac::context * );
  gen r2sym(const giac::factorization & vnum,const giac::vecteur & l,giac::context * );
  std::string & add_print(std::string & s,const gen & g,giac::context * );
  void evalfdouble2reim(const gen & a,gen & e,gen & f0,gen & f1,giac::context * );
  std::string gen2tex(const gen & e,giac::context * );
  gen graph2tex(const gen & args,const giac::vecteur & v,giac::context * );
  gen _graph2tex(const gen & args,giac::context * );
  gen _graph3d2tex(const gen & args,giac::context * );
  gen _latex(const gen & args,giac::context * );
  gen _seq(const gen & g,giac::context * );
  gen _logb(const gen & g,giac::context * );
  gen _getType(const gen & g,giac::context * );
  gen _Define(const gen & g,giac::context * );
  gen _isprime(const gen & args,giac::context * );
  gen _Input(const gen & args,giac::context * );
  gen _InputStr(const gen & g,giac::context * );
  gen _Prompt(const gen & g,giac::context * );
  gen _cSolve(const gen & g,giac::context * );
  gen _cFactor(const gen & g,giac::context * );
  gen _cpartfrac(const gen & g,giac::context * );
  gen _nSolve(const gen & g,giac::context * );
  gen _zeros(const gen & g,giac::context * );
  gen _cZeros(const gen & g,giac::context * );
  gen _getDenom(const gen & g,giac::context * );
  gen _denom(const gen & g,giac::context * );
  gen _getNum(const gen & g,giac::context * );
  gen _numer(const gen & g,giac::context * );
  gen _tExpand(const gen & g,giac::context * );
  gen _comDenom(const gen & g,giac::context * );
  gen _randPoly(const gen & g,giac::context * );
  gen _nInt(const gen & g,giac::context * );
  gen _nDeriv(const gen & g,giac::context * );
  gen _avgRC(const gen & g,giac::context * );
  gen _fMin(const gen & g,giac::context * );
  gen _fMax(const gen & g,giac::context * );
  gen _taylor(const gen & g,giac::context * );
  gen _arcLen(const gen & g,giac::context * );
  gen _dim(const gen & g,giac::context * );
  gen _format(const gen & g,giac::context * );
  gen _inString(const gen & g,giac::context * );
  gen _left(const gen & g,giac::context * );
  gen _right(const gen & g,giac::context * );
  gen _mid(const gen & g,giac::context * );
  gen _ord(const gen & g,giac::context * );
  gen _rotate(const gen & g,giac::context * );
  gen _shift(const gen & g,giac::context * );
  gen _augment(const gen & g,giac::context * );
  gen _semi_augment(const gen & g,giac::context * );
  gen _cumSum(const gen & g,giac::context * );
  gen _exp2list(const gen & g,giac::context * );
  gen _list2mat(const gen & g,giac::context * );
  gen _deltalist(const gen & g,giac::context * );
  gen _mat2list(const gen & g,giac::context * );
  gen _newList(const gen & g,giac::context * );
  gen _polyEval(const gen & g,giac::context * );
  gen _product(const gen & g,giac::context * );
  gen _SortA(const gen & g,giac::context * );
  gen _SortD(const gen & g,giac::context * );
  gen _int(const gen & g,giac::context * );
  gen _iPart(const gen & g,giac::context * );
  gen _Fill(const gen & g,giac::context * );
  gen _mRow(const gen & g,giac::context * );
  gen _mRowAdd(const gen & g,giac::context * );
  gen _rowAdd(const gen & g,giac::context * );
  gen _rowSwap(const gen & g,giac::context * );
  gen _LU(const gen & g,giac::context * );
  gen _QR(const gen & g,giac::context * );
  gen _newMat(const gen & g,giac::context * );
  gen _ref(const gen & a,giac::context * ) ;
  gen _subMat(const gen & g,giac::context * ) ;
  gen _unitV(const gen & g,giac::context * ) ;
  gen _rowNorm(const gen & g,giac::context * ) ;
  gen _colNorm(const gen & g,giac::context * ) ;
  gen _Archive(const gen & g,giac::context * );
  gen _Unarchiv(const gen & g,giac::context * );
  gen _ClrIO(const gen & g,giac::context * );
  gen _Output(const gen & g,giac::context * );
  gen _getKey(const gen & g,giac::context * );
  gen _DelFold(const gen & g,giac::context * );
  gen _DispG(const gen & g,giac::context * );
  gen _DispHome(const gen & g,giac::context * );
  gen _Exec(const gen & g,giac::context * );
  gen _NewFold(const gen & g,giac::context * );
  gen _GetFold(const gen & g,giac::context * );
  gen _StoPic(const gen & g,giac::context * );
  gen _RclPic(const gen & g,giac::context * );
  gen _RplcPic(const gen & g,giac::context * );
  gen _ClrGraph(const gen & g,giac::context * );
  gen _PtOn(const gen & g,giac::context * );
  gen _PtOff(const gen & g,giac::context * );
  gen _Line(const gen & g,giac::context * );
  gen _LineHorz(const gen & g,giac::context * );
  gen _LineVert(const gen & g,giac::context * );
  gen _DrawSlp(const gen & g,giac::context * );
  gen _Circle(const gen & g,giac::context * );
  gen _PtText(const gen & g,giac::context * );
  gen _NewPic(const gen & g,giac::context * );
  gen _ZoomSto(const gen & g,giac::context * );
  gen _ZoomRcl(const gen & g,giac::context * );
  gen _deSolve(const gen & g,giac::context * );
  gen _LineTan(const gen & g,giac::context * );
  gen _CyclePic(const gen & g,giac::context * );
  gen _RandSeed(const gen & g,giac::context * );
  gen exact(const gen & g,giac::context * );
  gen fPart(const gen & g,giac::context * );
  gen simult(const gen & g,giac::context * );
  // gen make_symbol(const std::string & s,giac::context * );
  gen _unarchive_ti(const gen & g,giac::context * );
  gen _sialorssinon(const gen & g,giac::context * );
  gen _pour(const gen & g,giac::context * );
  gen _unarchive_ti(const gen & args,giac::context * );
  std::string printsommetasoperator(const gen & feuille,const char * sommetstr,giac::context * );
  std::string texprintsommetasoperator(const gen & feuille,const char * sommetstr,giac::context * );
  gen taylor(const gen & lim_point,int order,const giac::unary_function_ptr & D, int direction,gen & shift_coeff,giac::context * );
  gen apply(const gen & e,const giac::unary_function_ptr & f,giac::context * );
  gen frac_neg_out(const gen & g,giac::context * );
  gen _constant_one(const gen & args,giac::context * );
  gen _constant_zero(const gen & args,giac::context * );
  gen _rm_a_z(const gen & args,giac::context * );
  gen _id(const gen & args,giac::context * );
  gen _not(const gen & args,giac::context * );
  gen _neg(const gen & args,giac::context * );
  gen _inv(const gen & args,giac::context * );
  gen ln(const gen & e,giac::context * );
  gen log(const gen & e,giac::context * );
  gen log10(const gen & e,giac::context * );
  gen alog10(const gen & e,giac::context * );
  gen atan(const gen & e0,giac::context * );
  gen exp(const gen & e0,giac::context * );
  std::string gen2string(const gen & g,int format,giac::context * );
  std::string print_with_parenthesis_if_required(const gen & g,int format,giac::context * );
  gen sqrt_noabs(const gen & e,giac::context * );
  gen sqrt(const gen & e,giac::context * );
  gen sqrt_mod(const gen & a,const gen & b,bool isprime,giac::context * ); // set isprime to true if b is prime
  gen sin(const gen & e,giac::context * );
  gen cos(const gen & e,giac::context * );
  gen tan(const gen & e,giac::context * );
  gen asin(const gen & e,giac::context * );
  gen acos(const gen & e,giac::context * );
  gen sinh(const gen & e,giac::context * );
  gen cosh(const gen & e,giac::context * );
  gen tanh(const gen & e,giac::context * );
  gen asinh(const gen & e,giac::context * );
  gen acosh(const gen & e,giac::context * );
  gen atanh(const gen & e,giac::context * );
  gen quote(const gen & e,giac::context * );
  gen unquote(const gen & e,giac::context * );
  gen re(const gen & a,giac::context * );
  gen im(const gen & a,giac::context * );
  gen conj(const gen & a,giac::context * );
  gen _sign(const gen & g,giac::context * );
  gen order_size(const gen & e,giac::context * );
  gen _and(const gen & args,giac::context * );
  gen _ou(const gen & args,giac::context * );
  gen _xor(const gen & args,giac::context * );
  gen xor2(const gen & a,const gen & b,giac::context * );
  gen _min(const gen & args,giac::context * );
  gen _max(const gen & args,giac::context * );
  gen _gcd(const gen & args,giac::context * );
  gen _lcm(const gen & args,giac::context * );
  gen _egcd(const gen & args,giac::context * );
  gen _iegcd(const gen & args,giac::context * );
  gen _iquo(const gen & args,giac::context * );
  gen _irem(const gen & args,giac::context * );
  // gen _mods(const gen & args,giac::context * );
  gen _quote_pow(const gen & args,giac::context * );
  gen _iquorem(const gen & args,giac::context * );
  gen _smod(const gen & args,giac::context * );
  gen _rdiv(const gen & args,giac::context * );
  gen _is_prime(const gen & args,giac::context * );
  gen _is_pseudoprime(const gen & args,giac::context * );
  gen nextprime1(const gen & a,giac::context * );
  gen prevprime1(const gen & a,giac::context * );
  // gen _nextprime(const gen & args,giac::context * );
  // gen _prevprime(const gen & args,giac::context * );
  gen _jacobi_symbol(const gen & args,giac::context * );
  gen _legendre_symbol(const gen & args,giac::context * );
  gen _floor(const gen & args,giac::context * );  
  gen _ceil(const gen & args,giac::context * );  
  gen ceil2floor(const gen & g,giac::context * );
  gen _round(const gen & args,giac::context * );  
  gen _print(const gen & args,giac::context * );  
  gen _ichinrem(const gen & args,giac::context * );
  gen double_is_int(const gen & g,giac::context * );
  gen _fracmod(const gen & args,giac::context * );
  gen _factorial(const gen & args,giac::context * );
  gen _perm(const gen & args,giac::context * );
  gen comb(const gen & n,const gen &k,giac::context * );
  gen _comb(const gen & args,giac::context * );
  gen _chinrem(const gen & args,giac::context * );
  gen _abs(const gen & args,giac::context * );
  gen _cyclotomic(const gen & a,giac::context * );
  gen _calc_mode(const gen & args,giac::context * );
  gen _quorem(const gen & args,giac::context * );
  gen _quo(const gen & args,giac::context * );
  gen _rem(const gen & args,giac::context * );
  gen sto(const gen & a,const gen & b,giac::context * );
  gen sto(const gen & a,const gen & b,bool in_place,giac::context * );  
  bool is_assumed_integer(const gen & g,giac::context * );
  gen giac_assume(const gen & a,giac::context * );
  gen giac_additionally(const gen & a,giac::context * );
  gen doubleassume_and(const giac::vecteur & v,const gen & a,int direction,bool or_assumption,giac::context * );
  gen _equal(const gen & args,giac::context * );
  gen _same(const gen & args,giac::context * );
  gen _inferieur_strict(const gen & args,giac::context * );
  gen _inferieur_egal(const gen & args,giac::context * );
  gen _superieur_strict(const gen & args,giac::context * );
  gen _superieur_egal(const gen & args,giac::context * );
  gen _different(const gen & args,giac::context * );
  gen check_symb_of(const gen & a,const gen & b,giac::context * );
  gen _of(const gen & args,giac::context * );
  gen _at(const gen & args,giac::context * );
  gen _table(const gen & args,giac::context * );
  gen _plus(const gen & args,giac::context * );
  gen _prod(const gen & args,giac::context * );
  std::string cprintaspow(const gen & feuille,const char * sommetstr_orig,giac::context * );
  gen _pow(const gen & args,giac::context * );
  gen _powmod(const gen & args,giac::context * );
  gen _eval(const gen & a,giac::context * );
  gen _evalf(const gen &,giac::context * );
  gen _subst(const gen & args,giac::context * );
  gen _subs(const gen & args,giac::context * );
  gen _maple_subs(const gen & args,giac::context * );
  gen _ampersand_times(const gen & g,giac::context * );
  gen _version(const gen & a,giac::context * );
  gen Gamma(const gen & x,giac::context * );
  gen _Gamma(const gen & args,giac::context * );
  gen lngamma(const gen & x,giac::context * );
  gen Psi(const gen & x,giac::context * );
  gen Psi(const gen & x,int n,giac::context * );
  gen _Psi(const gen & args,giac::context * );
  gen Zeta(const gen & x,giac::context * );
  gen _Zeta(const gen & args,giac::context * );
  gen _erf(const gen & args,giac::context * );
  gen erf(const gen & args,giac::context * );
  gen _erfc(const gen & args,giac::context * );
  gen erfc(const gen & args,giac::context * );
  gen _Ci(const gen & g,giac::context * );
  gen _Si(const gen & g,giac::context * );
  gen _Ei(const gen & g,giac::context * );
  gen _Heaviside(const gen & args,giac::context * );
  gen _Dirac(const gen & args,giac::context * );
  gen _multistring(const gen & args,giac::context * );
  gen Gamma(const gen & x,giac::context * );
  gen _Gamma(const gen & args,giac::context * ) ;
  gen Psi(const gen & x,giac::context * );
  gen Psi(const gen & x,int n,giac::context * );
  gen _Psi(const gen & args,giac::context * ) ;
  gen _normalmod(const gen & g,giac::context * );
  gen alternate_series(const gen & a,const gen & x,int n,giac::context * );
  gen Eta(const gen & s,int ndiff,giac::context * );
  gen Eta(const gen & s0,giac::context * );
  gen Zeta(const gen & x,int ndiff,giac::context * );
  gen Zeta(const gen & x,giac::context * );
  gen _Zeta(const gen & args,giac::context * ) ;
  gen _Eta(const gen & args,giac::context * ) ;
  gen _erfs(const gen & g,giac::context * );
  gen erf(const gen & x,giac::context * );
  gen _erf(const gen & args,giac::context * );
  gen erfc(const gen & x,giac::context * );
  gen _erfc(const gen & args,giac::context * );
  gen _SiCi_f(const gen & args,giac::context * );
  gen _SiCi_g(const gen & args,giac::context * );
  gen _Si(const gen & args,giac::context * );
  gen _Ci(const gen & args,giac::context * );
  gen _Ci0(const gen & args,giac::context * );
  gen _Ei_f(const gen & args,giac::context * );
  gen Ei(const gen & args,giac::context * );
  gen Ei(const gen & args,int n,giac::context * );
  gen _Ei(const gen & args,giac::context * );
  gen _Ei0(const gen & args,giac::context * );
  gen Ci_replace0(const gen & g,giac::context * );
  gen Ei_replace0(const gen & g,giac::context * );
  gen _Dirac(const gen & args,giac::context * );
  gen _Heaviside(const gen & args,giac::context * );
  std::string printassubs(const gen & feuille,const char * sommetstr,giac::context * );
  std::string printasmaple_subs(const gen & feuille,const char * sommetstr,giac::context * );
  std::string printassto(const gen & feuille,const char * sommetstr,giac::context * );
  gen _proot(const gen & e,giac::context * );
  gen _pcoeff(const gen & e,giac::context * );
  gen _peval(const gen & e,giac::context * );
  gen spread_convert(const gen & g,int g_row,int g_col,giac::context * );
  bool iscell(const gen & g,int & r,int & c,giac::context * );
  giac::matrice matrice_insert(const giac::matrice & m,int insert_row,int insert_col,int nrows,int ncols,const gen & fill,giac::context * );
  gen cross(const gen & g1,const gen & g2,giac::context * );
  gen _tran(const gen & a,giac::context * );
  gen ckmtrace(const gen & a,giac::context * );
  bool mrref(const giac::matrice & a, giac::matrice & res, giac::vecteur & pivots, gen & det,giac::context * );
  gen _rref(const gen & a,giac::context * ); // first non 0 elem in row is 1
  gen _idn(const gen & e,giac::context * );
  giac::vecteur vranm(int n,const gen & f,giac::context * ); 
  giac::matrice mranm(int n,int m,const gen & f,giac::context * ); // random matrix using f
  gen _ranm(const gen & e,giac::context * );
  gen _randvector(const gen & e,giac::context * );
  gen _padic_linsolve(const gen & g,giac::context * );
  gen mdet(const giac::matrice & a,giac::context * );
  gen _det(const gen & a,giac::context * );
  //gen _det_minor(const gen & g,bool convert_internal,giac::context * );
  gen _sylvester(const gen & a,giac::context * );
  gen _hessenberg(const gen & g,giac::context * );
  gen _pcar_hessenberg(const gen & g,giac::context * );
  gen _hessenberg(const gen & g0,giac::context * );
  gen _pcar(const gen & a,giac::context * );
  bool egv(const giac::matrice & m,giac::matrice & p,giac::vecteur & d, giac::context * , bool jordan,bool rational_jordan_form,bool eigenvalues_only);
  gen _egv(const gen & a,giac::context * );
  gen _svd(const gen & a,giac::context * );
  gen _egvl(const gen & a,giac::context * );
  gen _jordan(const gen & a,giac::context * );
  gen jordan(const gen & a,bool rational_jordan,giac::context * );
  gen _rat_jordan(const gen & a,giac::context * );
  gen _rat_jordan_block(const gen &args,giac::context * );
  giac::matrice diagonal_apply(const gen & g,const gen & x,const giac::matrice & m,giac::context * );
  giac::matrice analytic_apply(const gen &ux,const gen & x,const giac::matrice & m,giac::context * );
  giac::matrice matpow(const giac::matrice & m,const gen & n,giac::context * );
  gen _matpow(const gen & a,giac::context * );
  gen _ker(const gen & a,giac::context * );
  gen _image(const gen & a,giac::context * );
  gen _cross(const gen & a,giac::context * );
  gen _size(const gen & a,giac::context * );
  gen lu(const gen & a,giac::context * );
  gen qr(const gen & a,giac::context * );
  gen _cholesky(const gen & a,giac::context * );
  gen _svd(const gen & a,giac::context * );
  gen _basis(const gen & a,giac::context * );
  gen _ibasis(const gen & a,giac::context * );
  gen _cell(const gen & a,giac::context * );
  gen l2norm(const giac::vecteur & v,giac::context * );
  gen _lll(const gen & g,giac::context * );
  gen _ihermite(const gen & g,giac::context * );
  gen _ismith(const gen & g,giac::context * );
  gen _csv2gen(const gen & g,giac::context * );
  giac::matrice csv2gen(std::istream & i,char sep,char nl,char decsep,char eof,giac::context * );
}


