Statistiques
| Révision :

root / pobysoPythonSage / src / sollya_lib.sage

Historique | Voir | Annoter | Télécharger (10,89 ko)

1
import sys
2
from ctypes import *
3
## Commented out the below import since it apparently break the creation
4
#  of RealField elements from literals.
5
#from sage.rings.real_mpfr import *
6
#
7
## Load the Sollya library.
8
try:
9
    sollya=CDLL("/usr/local/lib/libsollya.so")    
10
except :
11
    print "\nCould not find nor load the Sollya library.\n"
12
    sys.exit(1)
13
#
14
try:
15
    # Export the functions with their name in the library (so we can
16
    # call them without the "sollya." prefix).
17
        sollya_lib_add = sollya.sollya_lib_add
18
        sollya_lib_abs = sollya.sollya_lib_abs
19
        sollya_lib_absolute = sollya.sollya_lib_absolute
20
        sollya_lib_append = sollya.sollya_lib_append
21
        sollya_lib_autoprint = sollya.sollya_lib_autoprint
22
        sollya_lib_build_end_elliptic_list = \
23
            sollya.sollya_lib_build_end_elliptic_list
24
        sollya_lib_build_function_abs = sollya.sollya_lib_build_function_abs
25
        sollya_lib_build_function_add = sollya.sollya_lib_build_function_add
26
        sollya_lib_build_function_div = sollya.sollya_lib_build_function_div
27
        sollya_lib_build_function_exp = sollya.sollya_lib_build_function_exp
28
        sollya_lib_build_function_free_variable = \
29
            sollya.sollya_lib_build_function_free_variable
30
        sollya_lib_build_function_mul = sollya.sollya_lib_build_function_mul
31
        sollya_lib_build_function_pow = sollya.sollya_lib_build_function_pow
32
        sollya_lib_build_function_sub = sollya.sollya_lib_build_function_sub
33
        sollya_lib_build_list = sollya.sollya_lib_build_list
34
        sollya_lib_chebyshevform = sollya.sollya_lib_chebyshevform
35
        sollya_lib_clear_obj = sollya.sollya_lib_clear_obj
36
        sollya_lib_clear_object_list = sollya.sollya_lib_clear_object_list
37
        sollya_lib_close = sollya.sollya_lib_close
38
        sollya_lib_coeff = sollya.sollya_lib_coeff
39
        sollya_lib_constant = sollya.sollya_lib_constant
40
        sollya_lib_constant_from_int = sollya.sollya_lib_constant_from_int
41
        sollya_lib_constant_from_int64 = sollya.sollya_lib_constant_from_int64
42
        sollya_lib_constant_from_mpq = sollya.sollya_lib_constant_from_mpq 
43
        sollya_lib_constant_from_mpz = sollya.sollya_lib_constant_from_mpz 
44
        sollya_lib_constant_from_uint64 = \
45
            sollya.sollya_lib_constant_from_uint64
46
        sollya_lib_copy_obj = sollya.sollya_lib_copy_obj
47
        sollya_lib_cos = sollya.sollya_lib_cos
48
        sollya_lib_degree = sollya.sollya_lib_degree
49
        sollya_lib_diff = sollya.sollya_lib_diff
50
        sollya_lib_dirtyfindzeros = \
51
            sollya.sollya_lib_dirtyfindzeros
52
        sollya_lib_dirtyinfnorm = sollya.sollya_lib_dirtyinfnorm
53
        sollya_lib_end_elliptic_list= \
54
            sollya.sollya_lib_end_elliptic_list
55
        sollya_lib_error=sollya.sollya_lib_error
56
        sollya_lib_evaluate = sollya.sollya_lib_evaluate
57
        sollya_lib_findzeros = sollya.sollya_lib_findzeros
58
        sollya_lib_free = sollya.sollya_lib_free
59
        sollya_lib_get_canonical = sollya.sollya_lib_get_canonical
60
        sollya_lib_get_constant = sollya.sollya_lib_get_constant
61
        sollya_lib_get_constant_as_int = \
62
            sollya.sollya_lib_get_constant_as_int
63
        sollya_lib_get_constant_as_int64 = \
64
            sollya.sollya_lib_get_constant_as_int64
65
        sollya_lib_get_constant_as_uint64 = \
66
            sollya.sollya_lib_get_constant_as_uint64
67
        sollya_lib_get_free_variable_name = \
68
        sollya.sollya_lib_get_free_variable_name
69
        sollya_lib_get_function_arity = sollya.sollya_lib_get_function_arity
70
        sollya_lib_get_head_function = sollya.sollya_lib_get_head_function
71
        sollya_lib_get_interval_from_range = \
72
            sollya.sollya_lib_get_interval_from_range
73
        sollya_lib_get_list_elements = sollya.sollya_lib_get_list_elements
74
        sollya_lib_get_object_list_head = \
75
            sollya.sollya_lib_get_object_list_head
76
        sollya_lib_get_object_list_tail = \
77
            sollya.sollya_lib_get_object_list_tail
78
        sollya_lib_get_prec = sollya.sollya_lib_get_prec
79
        sollya_lib_get_prec_of_constant = sollya.sollya_lib_get_prec_of_constant
80
        sollya_lib_get_prec_of_range = sollya.sollya_lib_get_prec_of_range
81
        sollya_lib_get_subfunctions = sollya.sollya_lib_get_subfunctions
82
        sollya_lib_guessdegree = sollya.sollya_lib_guessdegree
83
        sollya_lib_head = sollya.sollya_lib_head
84
        sollya_lib_inf = sollya.sollya_lib_inf
85
        sollya_lib_infnorm = sollya.sollya_lib_infnorm
86
        sollya_lib_init= sollya.sollya_lib_init
87
        sollya_lib_is_absolute = sollya.sollya_lib_is_absolute
88
        sollya_lib_is_empty_object_list = \
89
            sollya.sollya_lib_is_empty_object_list
90
        sollya_lib_obj_is_function = sollya.sollya_lib_obj_is_function
91
        sollya_lib_is_off = sollya.sollya_lib_is_off
92
        sollya_lib_is_on = sollya.sollya_lib_is_on
93
        sollya_lib_obj_is_range = sollya.sollya_lib_obj_is_range
94
        sollya_lib_max = sollya.sollya_lib_max
95
        sollya_lib_mid = sollya.sollya_lib_mid
96
        sollya_lib_name_free_variable = \
97
            sollya.sollya_lib_name_free_variable
98
        sollya_lib_obj_is_function = sollya.sollya_lib_obj_is_function
99
        sollya_lib_obj_is_range = sollya.sollya_lib_obj_is_range
100
        sollya_lib_obj_is_string = sollya.sollya_lib_obj_is_string
101
        sollya_lib_obj_is_list = sollya.sollya_lib_obj_is_list
102
        sollya_lib_obj_is_error = sollya.sollya_lib_obj_is_error
103
        sollya_lib_obj_is_range = sollya.sollya_lib_obj_is_range
104
        sollya_lib_obj_is_structure = sollya.sollya_lib_obj_is_structure
105
        sollya_lib_off = sollya.sollya_lib_off
106
        sollya_lib_on = sollya.sollya_lib_on
107
        sollya_lib_max = sollya.sollya_lib_max
108
        sollya_lib_parse_string = sollya.sollya_lib_parse_string
109
        sollya_lib_precision = sollya.sollya_lib_precision
110
        sollya_lib_prepend = sollya.sollya_lib_prepend
111
        sollya_lib_range = sollya.sollya_lib_range
112
        sollya_lib_range_from_bounds = sollya.sollya_lib_range_from_bounds
113
        sollya_lib_range_from_interval = \
114
            sollya.sollya_lib_range_from_interval
115
        sollya_lib_relative = sollya.sollya_lib_relative
116
        sollya_lib_remez = sollya.sollya_lib_remez
117
        sollya_lib_roundcoefficients = \
118
            sollya.sollya_lib_roundcoefficients
119
        sollya_lib_set_canonical = sollya.sollya_lib_set_canonical
120
        sollya_lib_set_prec = sollya.sollya_lib_set_prec
121
        sollya_lib_sub = sollya.sollya_lib_sub
122
        sollya_lib_sup = sollya.sollya_lib_sup
123
        sollya_lib_supnorm = sollya.sollya_lib_supnorm
124
        sollya_lib_tail = sollya.sollya_lib_tail
125
        sollya_lib_taylor = sollya.sollya_lib_taylor
126
        sollya_lib_taylorform = sollya.sollya_lib_taylorform
127
except :
128
    print "\nCould not rename one of the functions.\n"
129
    sys.exit(1)
130

    
131
# Set the return type of several functions (those that have a return
132
# type different from c_int or void). We consider the all the functions
133
# returning a sollya_obj_t as returning an int.
134
try:
135
    sollya_lib_chebyshevform.restype            = c_ulong          
136
    sollya_lib_constant.restype                 = c_ulong
137
    sollya_lib_guessdegree.restype              = c_ulong  
138
    sollya_lib_get_free_variable_name.restype   = c_char_p
139
    sollya_lib_infnorm.restypes                 = c_ulong
140
    sollya_lib_parse_string.restype             = c_long
141
    sollya_lib_range.restype                    = c_ulong
142
    sollya_lib_range_from_bounds.restype        = c_ulong
143
    sollya_lib_range_from_interval.restype      = c_ulong
144
except :
145
    sys.stderr.write("\nOne of the Python-Sollya return type setting command \n")
146
    sys.stderr.write("has failed.\n\n")
147
    sys.exit(1)
148
#
149
# Set the argument type of several functions. Default arguments are int.
150
#
151
try:
152
    sollya_lib_add.argtypes                  = [c_ulong, c_ulong]
153
    sollya_lib_append.argstypes              = [c_ulong, c_ulong]
154
    #sollya_lib_autoprint.argtypes            = [c_ulong]
155
    sollya_lib_build_function_add.argtypes   = [c_int, c_int]
156
    sollya_lib_chebyshevform.argtypes        = [c_ulong, c_ulong]
157
    sollya_lib_constant.argtypes             = [c_ulong]
158
    sollya_lib_constant_from_int64.argtypes  = [c_long]
159
    sollya_lib_constant_from_mpq.argtypes    = [c_ulong]
160
    sollya_lib_dirtyinfnorm.argstypes        = [c_ulong, c_ulong]
161
    sollya_lib_end_elliptic_list.argtypes    = [c_ulong, c_int]
162
    sollya_lib_get_constant.argtypes         = [c_ulong, c_ulong]
163
    sollya_lib_get_constant_as_int.argtypes  = [POINTER(c_int), c_int]
164
    sollya_lib_get_constant_as_int64.argtypes= [POINTER(c_long), c_int]
165
    sollya_lib_get_function_arity.argtypes   = [POINTER(c_int), c_int]
166
    sollya_lib_get_head_function.argtypes    = [POINTER(c_int), c_ulong]
167
    sollya_lib_get_interval_from_range.argtypes = [c_ulong, c_ulong]
168
    sollya_lib_get_list_elements.argtypes    = [POINTER(POINTER(c_longlong)), \
169
                                                POINTER(c_int),\
170
                                                POINTER(c_int), c_int]
171
    sollya_lib_get_prec_of_constant.argtypes = [POINTER(c_int), c_ulong]
172
    sollya_lib_get_prec_of_range.argtypes    = [POINTER(c_int), c_int]
173
    sollya_lib_get_subfunctions.argtypes     = [c_int, POINTER(c_int), \
174
            POINTER(c_int), POINTER(c_int), POINTER(c_int), POINTER(c_int), \
175
            POINTER(c_int), POINTER(c_int), POINTER(c_int), POINTER(c_int), \
176
            POINTER(c_int), POINTER(c_int)]
177
    sollya_lib_guessdegree.argtypes          = [c_ulong, c_ulong, c_ulong, \
178
            c_ulong, c_ulong]
179
    sollya_lib_name_free_variable.argtypes   = [POINTER(c_char)]
180
    sollya_lib_prepend.argstypes             = [c_ulong, c_ulong]
181
    sollya_lib_range.argtypes                = [c_ulong, c_ulong]
182
    sollya_lib_range_from_bounds.argtypes    = [c_ulong, c_ulong]
183
    sollya_lib_range_from_interval.argtypes  = [c_ulong]
184
    sollya_lib_supnorm.argtypes              = \
185
          [c_ulong, c_ulong, c_ulong, c_ulong, c_ulong]
186
    sollya_lib_supnorm.restype               = c_ulong
187
except :
188
    sys.stderr.write("\nOne of the Python-Sollya arguments type setting command \n")
189
    sys.stderr.write("has failed.\n\n")
190
    sys.exit(1)
191
#
192
# Give it a try!
193
#
194
sollya
195
sollya.sollya_lib_init(None)
196
sys.stderr.write("\nSuperficial Sollya library check...\n")
197

    
198
#print sollya.sollya_lib_get_free_variable_name()
199
sollyaExp = sollya_lib_parse_string("exp(x)")
200
#retc = sollya_lib_autoprint(sollyaExp, None)
201
arg = sollya_lib_constant_from_int(int(1))
202
#print "Type of sollya_obj_t: ",type(arg), "Value: ", arg
203
res = sollya_lib_evaluate(sollyaExp, arg)
204
#retc = sollya_lib_autoprint(res, None)
205
retc = sollya_lib_get_prec(None)
206
a = c_int(0)
207
sollya_lib_get_constant_as_int(byref(a), retc)
208
b = a.value
209
#print "Precision : ", a.value
210
#print "Address of a.value ", addressof(a)
211
#sollya_lib_close(None)
212
sys.stderr.write("\t...Sollya library check done.\n")
213
#
214
#
215
#
216
#b = RealNumber()
217
#print cast(retc, POINTER(c_int)).contents
218
#retc = cast(retc, POINTER(c_int)).contents
219
#arg = sollya_lib_constant_from_int(int(retc))
220
#retc = sollya_lib_autoprint(arg, None)
221
#sollya_lib_set_prec(c_int(100))