Commit 5c75031d authored by Frederic HAN's avatar Frederic HAN
Browse files

winrebuilt with ntl. remove *.cpp, *.pyx, *.pxi from installed files

parent e254d413
......@@ -2,4 +2,7 @@ global-include giacpy/*.pyx
global-include giacpy/*.pxd
global-include giacpy/*.pxi
global-include giacpy/giacpymisc.h
global-include giacpy/giacpymisc.h
global-include giacpy/giacpy.cpp
global-include giacpy/giacpy2qcas.cpp
global-include giacpy/GPL-2
Metadata-Version: 1.0
Name: giacpy
Version: 0.4.2
Summary: A Cython frontend to the c++ library giac. (Computer Algebra System)
Home-page: http://www.math.jussieu.fr/~han/xcas/giacpy/
Author: Frederic Han
Author-email: han@math.jussieu.fr
License: GPLv2 or above
Description:
=============
Giacpy
=============
:Author: Frederic Han
:Copyright: 2012 Frederic Han
:License: GPL v2 or above
Access from python to the Computer Algebra System giac via libgiac
------------
Introduction
------------
This is an interface to be able to use from Python the Giac features.
* Giac is a general purpose Computer algebra system by Bernard Parisse released under GPLv3.
- http://www-fourier.ujf-grenoble.fr/~parisse/giac.html
- It is build on C and C++ libraries:
PARI, NTL (arithmetic), CoCoA (Groebner basis), GSL (numerics),
GMP (big integers), MPFR (bigfloats)
- It provides (fast) algorithms for multivariate polynomial operations (product, GCD, factorisation) and
- symbolic computations: solver, simplifications, limits/series, integration, sommation...
- Linear Algebra with numerical or symbolic coefficients.
* giacpy is an interface to this library. It is built with cython.
-----------
Short Usage
-----------
Example::
>>> from giacpy import giac
>>> x,y,z=giac('x,y,z')
>>> f=(x+y+z+1)**15+1
>>> g=(f*(f+1)).normal()
>>> print g.nops()
>>> print g.factor().nops()
>>> f.diff()
Help::
>>> help("giacpy")
>>> from giacpy import *
>>> normal.help() ; # to have help on some giac keyword
>>> solve.htmlhelp('fr') ; # to have detailled help on some giac keyword
>>> htmlhelp() ; # to have help the global help pages.
-------
Install
-------
* To build the extension from sources:
- You need the giac library, gmp and python headers. Ex: giac, libgmp-dev python-dev
- Then execute the command: python setup.py build_ext (or try the: make or make local)
- If you need some options see: python setup.py build_ext --help
* To install giacpy just do: python setup.py install
* To run tests you can try: make test
or run: python -m doctest giacpy.pyx -v (in the directory of giapy.so if it is not installed)
-----------------------------------
Short Tutorial on the giac function
-----------------------------------
This function evaluate a python object with the giac library.
* It creates in python a Pygen element and evaluate it with giac:
>>> from giacpy import giac,pi
>>> x,y=giac('x,y');type(x)
<type 'giacpy.Pygen'>
>>> (x+2*y).cos().texpand()
cos(x)*(2*cos(y)**2-1)-sin(x)*2*cos(y)*sin(y)
Coercion, Pygen and internal giac variables:
--------------------------------------------
* The most usefull objects will be the Python object of type Pygen.
>>> from giacpy import *
>>> x,y,z=giac('x,y,z')
>>> f=sum([x[i] for i in range(5)])**15/(y+z);f.coeff(x[0],12)
(455*(x[1])**3+1365*(x[1])**2*x[2]+1365*(x[1])**2*x[3]+1365*(x[1])**2*x[4]+1365*x[1]*(x[2])**2+2730*x[1]*x[2]*x[3]+2730*x[1]*x[2]*x[4]+1365*x[1]*(x[3])**2+2730*x[1]*x[3]*x[4]+1365*x[1]*(x[4])**2+455*(x[2])**3+1365*(x[2])**2*x[3]+1365*(x[2])**2*x[4]+1365*x[2]*(x[3])**2+2730*x[2]*x[3]*x[4]+1365*x[2]*(x[4])**2+455*(x[3])**3+1365*(x[3])**2*x[4]+1365*x[3]*(x[4])**2+455*(x[4])**3)/(y+z)
* The Python object y of type Pygen is not an internal giac variable. (Most of the time you won't need to use internal giac variables).
>>> type(y);giac('y:=1');y
<type 'giacpy.Pygen'>
1
y
* There are some natural coercion to Pygen elements:
>>> pi>3.14 ; pi >3.15 ; giac(3)==3
True
False
True
Lists of Pygen and Giac lists:
------------------------------
* Here l1 is a giac list and l2 a python list of Pygen type objects.
>>> l1=giac(range(10)); l2=[1/(i**2+1) for i in l1]
>>> sum(l2)
33054527/16762850
So l1+l1 is done in giac and means a vector addition. But l2+l2 is done in Python so it is the list concatenation.
>>> l1+l1
[0,2,4,6,8,10,12,14,16,18]
>>> l2+l2
[1, 1/2, 1/5, 1/10, 1/17, 1/26, 1/37, 1/50, 1/65, 1/82, 1, 1/2, 1/5, 1/10, 1/17, 1/26, 1/37, 1/50, 1/65, 1/82]
* Here V is not a Pygen element. We need to push it to giac to use a giac method like dim, or we need to use an imported function.
>>> V=[ [x[i]**j for i in range(9)] for j in range(9)]
>>> giac(V).dim()
[9,9]
>>> det_minor(V).factor()
(x[7]-(x[8]))*(x[6]-(x[8]))*(x[6]-(x[7]))*(x[5]-(x[8]))*(x[5]-(x[7]))*(x[5]-(x[6]))*(x[4]-(x[8]))*(x[4]-(x[7]))*(x[4]-(x[6]))*(x[4]-(x[5]))*(x[3]-(x[8]))*(x[3]-(x[7]))*(x[3]-(x[6]))*(x[3]-(x[5]))*(x[3]-(x[4]))*(x[2]-(x[8]))*(x[2]-(x[7]))*(x[2]-(x[6]))*(x[2]-(x[5]))*(x[2]-(x[4]))*(x[2]-(x[3]))*(x[1]-(x[8]))*(x[1]-(x[7]))*(x[1]-(x[6]))*(x[1]-(x[5]))*(x[1]-(x[4]))*(x[1]-(x[3]))*(x[1]-(x[2]))*(x[0]-(x[8]))*(x[0]-(x[7]))*(x[0]-(x[6]))*(x[0]-(x[5]))*(x[0]-(x[4]))*(x[0]-(x[3]))*(x[0]-(x[2]))*(x[0]-(x[1]))
* Modular objects with %
>>> V=ranm(5,5) % 2;
>>> ker(V).rowdim()+V.rank()
5
>>> a=giac(7)%3;a;a%0;7%3
1 % 3
1 % 3
1
Do not confuse with the full python integers:
>>> type(7%3);type(a)
<type 'int'>
<type 'giacpy.Pygen'>
Syntaxes with reserved or unknown Python symbols:
-------------------------------------------------
* In general equations needs symbols such as = < > or that have another meaning in Python. So those objects must be quoted.
>>> from giacpy import *
>>> x=giac('x')
>>> (1+2*sin(3*x)).solve(x)
list[-pi/3/6,7*pi/18]
>>> solve('sin(3*x)>2*sin(x)',x)
Traceback (most recent call last):
...
RuntimeError: Unable to find numeric values solving equation. For trigonometric equations this may be solved using assumptions, e.g. assume(x>-pi && x<pi) Error: Bad Argument Value
* You can also add some hypothesis to a giac symbol:
>>> assume('x>-pi && x<pi')
x
>>> solve('sin(3*x)>2*sin(x)',x)
list[((x>((-5*pi)/6)) and (x<((-pi)/6))),((x>0) and (x<(pi/6))),((x>(5*pi/6)) and (x<pi))]
* To remove those hypothesis use the giac function: purge
>>> purge('x')
assume[[],[line[-pi,pi]],[-pi,pi]]
>>> solve('x>0')
list[x>0]
* Same problems with the ..
>>> from giacpy import *
>>> x=giac('x')
>>> f=1/(5+cos(4*x));f.int(x)
1/2/(2*sqrt(6))*(atan(2*tan(4*x/2)/sqrt(6))+pi*floor(4*x/2/pi+1/2))
>>> fMax(f,'x=-0..pi').simplify()
pi/4,3*pi/4
>>> fMax.help()
"Returns the abscissa of the maximum of the expression.
Expr,[Var]
fMax(-x^2+2*x+1,x)
fMin"
>>> sum(1/(1+x**2),'x=0..infinity').simplify()
(pi*exp(pi)**2+pi+exp(pi)**2-1)/(2*exp(pi)**2-2)
---------
Changelog
---------
* Version 0.2:
- Add a comparison function to Pygen. (with coersion)
- Add a basic definition for most giac functions.
- Add some help.
* Version 0.2.1:
- Add __neg__ and __pos__ support for Pygen. (Ex: -pi)
- Change __repr__ to hide too long outputs.
- Make ** be the default printing for powers in giac.
* Version 0.2.2:
- Change Pygen() to Pygen('NULL'). (Ex: rand())
- Add direct acces to the python double value of a Pygen: a._double
- Add conversion to giac modulars via the operator %
- Add ctrl-c support during list initialisation and iteration
- Modification of __getitem__ to allow formal variables with indexes.
- Add htmlhelp method for Pygen objects.
- Improve the giac initialisation of Python long integers. (basic Horner method instead of strings)
- Improve help(giac) and doctests
- Add support for the slice notation with giac lists
* Version 0.2.3:
- Fix Pygen() None initialisation. Add crash test and improve speed in _wrap_gen
- Add a small Makefile
- Add a GiacSettings class with some frontends to the cas settings.
- Add French keywords
* Version 0.2.4:
- Update giac 1.1 keywords.
* Version 0.3:
- Add a qt output for 2d graphics via qcas.
- Fixes for giac 1.1
* Version 0.4:
- Fixes for Python 3 compatibility
- Qt/qcas can be disabled at compilation. (cf setup.py)
Platform: UNKNOWN
......@@ -311,3 +311,9 @@ Changelog
+ fix keywords update
- 0.6.5:
+ Add GPL-2 in MANIFEST.in
- 0.6.6:
+ disable include_package_data in setup.py to not install *.cpp files
and remove from install directory other source files that are not needed
by python nor by cython users.
+ windows rebuilt with giac-1.4.9-45 with NTL enabled
......@@ -88,7 +88,7 @@ if QTVERSION == None:
if QTVERSION != None:
QTVERSION=QTVERSION[0]
if QTHEADERS[-1] != "/":
print(QTHEADERS)
#print(QTHEADERS)
QTHEADERS=QTHEADERS+'/'
else:
QTHEADERS="/usr/include/qt5/"
......@@ -178,7 +178,7 @@ setup(
name='giacpy',
version='0.6.5.post1',
version='0.6.6',
description='A Cython frontend to the c++ library giac. (Computer Algebra System)',
author='Frederic Han',
author_email="frederic.han@imj-prg.fr",
......@@ -188,7 +188,7 @@ setup(
ext_modules=ext_modules,
packages = ['giacpy'],
package_dir=package_dir,
package_data=package_data,
package_data=package_data
#include_package_data=True#, (on unix (but not on windows) this will include all the *.cpp, and all files listed in MANIFEST.in in the module dir)
#cmdclass=cmdclass
)
......@@ -7,9 +7,10 @@ GIACBASEDIR=/home/fred/dev/windows/
#
DESTDIR=/home/fred/dev/windows/
CXX=i686-w64-mingw32-g++
#LIBS=-lntl -lpari -lgsl -lgslcblas -lintl -lpng -lmpfr -lgmp
# enabling NTL (built with NATIVE off and TUNE generic in DoConfig)
LIBS=-lntl -lpari -lgsl -lgslcblas -lintl -lpng -lmpfr -lgmp
# disabling ntl. factor crash on some computer?
LIBS=-lpari -lgsl -lgslcblas -lintl -lpng -lmpfr -lgmp
#LIBS=-lpari -lgsl -lgslcblas -lintl -lpng -lmpfr -lgmp
LIBPATH=-L/usr/i686-w64-mingw32/sys-root/mingw/bin -L/home/fred/dev/windows/bin -L/home/fred/dev/windows/lib
#
OBJECTS=input_lexer.o sym2poly.o gausspol.o threaded.o moyal.o maple.o ti89.o mathml.o misc.o permu.o quater.o desolve.o input_parser.o symbolic.o index.o modpoly.o modfactor.o ezgcd.o derive.o solve.o intg.o intgab.o risch.o lin.o series.o subst.o vecteur.o sparse.o csturm.o tex.o global.o ifactor.o alg_ext.o gauss.o isom.o plot.o plot3d.o rpn.o prog.o pari.o cocoa.o unary.o usual.o identificateur.o gen.o tinymt32.o first.o TmpLESystemSolver.o TmpFGLM.o help.o
......
......@@ -7,11 +7,11 @@ GIACBASEDIR=/home/fred/dev/win64/
#
DESTDIR=/home/fred/dev/win64/
CXX=x86_64-w64-mingw32-g++
#
#LIBS=-lntl -lpari -lgsl -lgslcblas -lintl -ldl -lpng -lmpfr -lgmp
# re enabling NTL built with NATIVE off and TUNE generic
LIBS=-lntl -lpari -lgsl -lgslcblas -lintl -ldl -lpng -lmpfr -lgmp
# disabling ntl - factor crash on some computer?
# NB: f=(x+y+z+1)**30+1 ; g=(f*(f+1)).normal() lose 0.5s over 5s without ntl.
LIBS=-lpari -lgsl -lgslcblas -lintl -ldl -lpng -lmpfr -lgmp
#LIBS=-lpari -lgsl -lgslcblas -lintl -ldl -lpng -lmpfr -lgmp
LIBPATH=-L/usr/x86_64-w64-mingw32/sys-root/mingw/bin -L/home/fred/dev/win64/bin -L/home/fred/dev/win64/lib
#
OBJECTS=input_lexer.o sym2poly.o gausspol.o threaded.o moyal.o maple.o ti89.o mathml.o misc.o permu.o quater.o desolve.o input_parser.o symbolic.o index.o modpoly.o modfactor.o ezgcd.o derive.o solve.o intg.o intgab.o risch.o lin.o series.o subst.o vecteur.o sparse.o csturm.o tex.o global.o ifactor.o alg_ext.o gauss.o isom.o plot.o plot3d.o rpn.o prog.o pari.o cocoa.o unary.o usual.o identificateur.o gen.o tinymt32.o first.o TmpLESystemSolver.o TmpFGLM.o help.o
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment