giacjs.i 100 KB
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 1943 1944
// 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 * );
}