Blame view

Giac_maj/giac-1.4.9/src/giacjs.i 100 KB
6663b6c9   adorian   projet complet av...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
  // Giac CAS and Javascript: first install libwebkit-dev
  // 1/ Making giacjs_wrap.cxx requires a javascript enabled version of swig
  // (gsoc-javascript)
  // swig -c++ -javascript -jsc -c++ giacjs.i
  // then modify in giacjs_wrap.cxx #define SWIG_fail                 return NULL;
  // (search for goto fail;)
  // 2/ Compiling giacjs_wrap.cxx
  // With libgiac dynamically linked (check path webkitgtk-1.0 might be webkit-1.0)
  // g++ -g -c -fpic  giacjs_wrap.cxx  -I/usr/include/webkit-1.0/ && g++ -shared  -fpic giacjs_wrap.o -L/usr/lib/ -lgiac  -o libgiacjs.so # -ljavascriptcoregtk-1.0 
  // 3/ Install the javascript giac library and compile an interpreter with giac enabled
  // sudo cp libgiacjs.so /usr/lib && sudo ldconfig
  // g++  -I/usr/include/webkit-1.0 javascript.cxx -o javascript -lwebkit-1.0
  // 4/ Running an example:
  // ./javascript -l giacjs giacjs.js
  
  /* File : giacjs.i 
     Interface for giac using swig for javascript
     Assumes gen are stored on 64 bits
   */
  %module giacjs
  
  %{
  #include "giac.h"
  %}
  
  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
    };
    gen genfromstring(const std::string & s);
    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,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 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 * );
    void zint2simpldoublpos(const gen & e,gen & simpl,gen & doubl,bool & pos,int d,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 * );
  }