Skip to main content

A Cython frontend to the c++ library giac. (Computer Algebra System)

Project description

Name:

giacpy

Summary:

A Cython frontend to the c++ library giac. (Computer Algebra System)

Author:

Frederic Han

Author-email:

frederic.han@imj-prg.fr

License:

GPL v2 or above

Home-page:

https://www.imj-prg.fr/~frederic.han/xcas/giacpy/

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. Graphic output is obtained with qcas by Loic Lecoq: http://git.tuxfamily.org/qcas/qcas.git

Short Usage

Example:

>>> import giacpy  # outputs various messages
Help file ... aide_cas not found
Added 0 synonyms
>>> giacpy.ifactor(2**128+1)
59649589127497217*5704689200685129054721
>>> 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
>>> print(normal.__doc__) ; # to have help on some giac keyword
>>> solve.htmlhelp('fr') ; # (may be not avaible on your system) to have detailled help on some giac keyword
>>> htmlhelp()  ; # to have help the global help pages.


* Graphics 2D Output: (cf. help('giacpy') for examples)
 If your version of giacpy has qt support, you can send graphics to qcas with the .qcas() method. For experimental interactive geometry see: help(qcas)

Install

  • To build the extension from sources (unix):

    • 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 on unix (needs libgiac): python setup.py install

  • For binaries of giacpy: http://webusers.imj-prg.fr/~frederic.han/xcas/giacpy/

  • 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
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)

    • 0.4.1:
      • add some giac keywords.

      • add proba_epsilon in GiacSetting.

      • test if the html doc is present locally, otherwise open the web doc.

    • 0.4.2:
      • add digits and epsilon in GiacSetting.

      • Fix for interruptions of giac operators.

      • Put all the GiacKeywords in a new class: GiacFunction to enable docstrings from giac.

    • 0.4.3:
      • Update qcas to current version. (svg export added)

      • New evaluation with threads to have better interruptions.

    • 0.4.4:
      • Add sqrt and complex flags in giac settings.

      • Add support for multi indexes. Ex A[1,2].

  • Version 0.5:
    • 0.5.0:
      • Put all the Qt/Graphics functions in an independant submodule

      • Add a save method for Pygen and a loadgiacgen function.

    • 0.5.2:
      • Update keywords and clean __init__.py docstring

    • 0.5.3:
      • improve setup.py for mingw built

    • 0.5.4:
      • update giac.dll windows binary to giac 1.2.3-57 with subsop patch and rowreduction-R55929 patch

      • post1: update win64 giac.dll to fix: interface with pari; matrix mul for integers

  • Version 0.6:
    • 0.6.0:
      • add a __setitem__ for Pygen elements. Ex: A[1,2]=3

      • add Linear algebra tutorial in the giac docstring.

    • 0.6.1:
      • update giac keywords.

    • 0.6.2:
      • add _repr_html_ and _repr_latex_ for jupyter output

      • rebuild giac.dll without ntl.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

giacpy-0.6.2.tar.gz (378.4 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

giacpy-0.6.2-cp36-cp36m-win_amd64.whl (14.5 MB view details)

Uploaded CPython 3.6mWindows x86-64

giacpy-0.6.2-cp36-cp36m-win32.whl (16.2 MB view details)

Uploaded CPython 3.6mWindows x86

giacpy-0.6.2-cp35-cp35m-win_amd64.whl (14.5 MB view details)

Uploaded CPython 3.5mWindows x86-64

giacpy-0.6.2-cp35-cp35m-win32.whl (16.2 MB view details)

Uploaded CPython 3.5mWindows x86

giacpy-0.6.2-cp34-cp34m-win_amd64.whl (14.5 MB view details)

Uploaded CPython 3.4mWindows x86-64

giacpy-0.6.2-cp34-cp34m-win32.whl (16.2 MB view details)

Uploaded CPython 3.4mWindows x86

giacpy-0.6.2-cp27-cp27m-win_amd64.whl (14.5 MB view details)

Uploaded CPython 2.7mWindows x86-64

giacpy-0.6.2-cp27-cp27m-win32.whl (16.2 MB view details)

Uploaded CPython 2.7mWindows x86

File details

Details for the file giacpy-0.6.2.tar.gz.

File metadata

  • Download URL: giacpy-0.6.2.tar.gz
  • Upload date:
  • Size: 378.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for giacpy-0.6.2.tar.gz
Algorithm Hash digest
SHA256 9ec95818d12d67e951636ef4f19cdefdc348177d0154fdd14c861b532b2925a8
MD5 adfa945271373e34ec81041c23d7df48
BLAKE2b-256 134cdaa293a9a7dfb66ff5ecda5ce70a9e7552cc1599822c816f9b33470f928d

See more details on using hashes here.

File details

Details for the file giacpy-0.6.2-cp36-cp36m-win_amd64.whl.

File metadata

File hashes

Hashes for giacpy-0.6.2-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 5e891b9781991a207faec0cb820c4327a2a542233295a973e60765cdb10eda5a
MD5 34d9422b2cb94f9498e8cb9e580a4d0b
BLAKE2b-256 b7fc0a98ea93ec5413dca78df0283d7716dfea84e95f49e9c887753ecaf79bad

See more details on using hashes here.

File details

Details for the file giacpy-0.6.2-cp36-cp36m-win32.whl.

File metadata

File hashes

Hashes for giacpy-0.6.2-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 dc19250703fb3b121bf6e2c7c6d25ba715c55523ad10f2d773a2e2da9e63c1eb
MD5 14b8af9937d46d9df678bb3f8f8eeffb
BLAKE2b-256 019f541848cf348622a7ace3410de13159f693ee4700b2475adf538eb8a8902f

See more details on using hashes here.

File details

Details for the file giacpy-0.6.2-cp35-cp35m-win_amd64.whl.

File metadata

File hashes

Hashes for giacpy-0.6.2-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 bb91b2906f1bd657fd06c72ced153b5463fe628db30ed86d8a3ae78744387bb3
MD5 a4814c78689d0f6f79b3f69f7bbb6acb
BLAKE2b-256 06700e68d388f54d22d04b5902909980d4f55228b9e31310743edbe2a6f879bb

See more details on using hashes here.

File details

Details for the file giacpy-0.6.2-cp35-cp35m-win32.whl.

File metadata

File hashes

Hashes for giacpy-0.6.2-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 c7888075361b2cb7847edceccadaca65cee830d25dca567e9bb498ba6ecadd77
MD5 c968bf7c84d5cc71a69f064f70636099
BLAKE2b-256 ceb23e16a7012aa239727d702e60ec9ea6c8c63373f9861b37504f6b62b056cd

See more details on using hashes here.

File details

Details for the file giacpy-0.6.2-cp34-cp34m-win_amd64.whl.

File metadata

File hashes

Hashes for giacpy-0.6.2-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 ee2a21249f27172e633b9add1ed0ddb864efcc9781ccdf943ce10391e7673f90
MD5 ad1130cd1387893b65033a3139686469
BLAKE2b-256 086b6295da2e6f802f456a19acf6b25bee0fef15648123b288c8a5a6855d7197

See more details on using hashes here.

File details

Details for the file giacpy-0.6.2-cp34-cp34m-win32.whl.

File metadata

File hashes

Hashes for giacpy-0.6.2-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 8b390435beeea25f9009cd5c49704d07b35364b6cced6dc03e3f743f276f9a35
MD5 59979050985293c3f861ef7c997d43be
BLAKE2b-256 cd7584dfca73ea43d2fd37db24a564aad709a8cbe3fe65b137796611d083ae13

See more details on using hashes here.

File details

Details for the file giacpy-0.6.2-cp27-cp27m-win_amd64.whl.

File metadata

File hashes

Hashes for giacpy-0.6.2-cp27-cp27m-win_amd64.whl
Algorithm Hash digest
SHA256 458eccbfadfb76ac8fcae6a9810abc331fbd246f966e503cd6e191cfc92b2c62
MD5 eea429df9a353ae0b2998b29be8ba48d
BLAKE2b-256 15ba169dc9b6f5f2ceff4b803318b1c4a3ff9643920d5e434741c628a7ef8d72

See more details on using hashes here.

File details

Details for the file giacpy-0.6.2-cp27-cp27m-win32.whl.

File metadata

File hashes

Hashes for giacpy-0.6.2-cp27-cp27m-win32.whl
Algorithm Hash digest
SHA256 4ceb88e7dbf83f22ad25e923dc7f548d131fd2a8b60bbc73237dc0327f0da02b
MD5 8c1d9325e1f39f1a682de8419be4ce12
BLAKE2b-256 9c693909312dce360a9afaa8108f7dff2fa9dad88e809ccd3790461e7058b41f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page