Révision 117 pobysoPythonSage/src/pobyso.py
pobyso.py (revision 117) | ||
---|---|---|
147 | 147 |
return(resultSo) |
148 | 148 |
# End pobyso_chebyshevform_so_so. |
149 | 149 |
|
150 |
def pobyso_clear_taylorform_sa_so(taylorFormSaSo): |
|
151 |
""" |
|
152 |
This method is necessary to correctly clean up the memory from Taylor forms. |
|
153 |
These are made of a Sollya object, a Sollya object list, a Sollya object. |
|
154 |
For no clearly understood reason, sollya_lib_clear_object_list crashed |
|
155 |
when applied to the object list. |
|
156 |
Here, we decompose it into Sage list of Sollya objects references and we |
|
157 |
clear them one by one. |
|
158 |
""" |
|
159 |
sollya_lib_clear_obj(taylorFormSaSo[0]) |
|
160 |
(coefficientsErrorsListSaSo, numElementsSa, isEndEllipticSa) = \ |
|
161 |
pobyso_get_list_elements_so_so(taylorFormSaSo[1]) |
|
162 |
for element in coefficientsErrorsListSaSo: |
|
163 |
sollya_lib_clear_obj(element) |
|
164 |
sollya_lib_clear_obj(taylorFormSaSo[1]) |
|
165 |
sollya_lib_clear_obj(taylorFormSaSo[2]) |
|
166 |
# End pobyso_clear_taylorform_sa_so |
|
167 |
|
|
150 | 168 |
def pobyso_cmp(rnArgSa, cteSo): |
151 | 169 |
""" |
152 | 170 |
Compare the MPFR value a RealNumber with that of a Sollya constant. |
... | ... | |
262 | 280 |
|
263 | 281 |
def pobyso_constant_from_int_so_sa(constSo): |
264 | 282 |
""" |
265 |
Get Sage int from a Sollya int constant. |
|
283 |
Get a Sage int from a Sollya int constant.
|
|
266 | 284 |
Usefull for precision or powers in polynomials. |
267 | 285 |
""" |
268 | 286 |
constSa = c_int(0) |
... | ... | |
479 | 497 |
""" Legacy function. See pobyso_get_list_elements_so_so. """ |
480 | 498 |
return(pobyso_get_list_elements_so_so(soObj)) |
481 | 499 |
|
482 |
def pobyso_get_list_elements_so_so(objSo): |
|
500 |
def pobyso_get_list_elements_so_so(objectListSo):
|
|
483 | 501 |
""" |
484 | 502 |
Get the list elements as a Sage/Python array of Sollya objects. |
485 | 503 |
The other data returned are Sage/Python objects. |
... | ... | |
487 | 505 |
listAddress = POINTER(c_longlong)() |
488 | 506 |
numElements = c_int(0) |
489 | 507 |
isEndElliptic = c_int(0) |
490 |
listAsList = [] |
|
508 |
listAsSageList = []
|
|
491 | 509 |
result = sollya_lib_get_list_elements(byref(listAddress),\ |
492 | 510 |
byref(numElements),\ |
493 | 511 |
byref(isEndElliptic),\ |
494 |
objSo) |
|
512 |
objectListSo)
|
|
495 | 513 |
if result == 0 : |
496 | 514 |
return None |
497 | 515 |
for i in xrange(0, numElements.value, 1): |
498 |
listAsList.append(sollya_lib_copy_obj(listAddress[i])) |
|
499 |
return(listAsList, numElements.value, isEndElliptic.value) |
|
516 |
listAsSageList.append(sollya_lib_copy_obj(listAddress[i])) |
|
517 |
# Clear each of the elements returned by Sollya. |
|
518 |
sollya_lib_clear_obj(listAddress[i]) |
|
519 |
# Free the list itself. |
|
520 |
sollya_lib_free(listAddress) |
|
521 |
return(listAsSageList, numElements.value, isEndElliptic.value) |
|
500 | 522 |
|
501 | 523 |
def pobyso_get_max_prec_of_exp(soExp): |
502 | 524 |
""" Legacy function. See pobyso_get_max_prec_of_exp_so_sa. """ |
... | ... | |
988 | 1010 |
taylorFormSo = sollya_lib_taylorform(functionSo, degreeSo, \ |
989 | 1011 |
intervalCenterSo, \ |
990 | 1012 |
rangeSo, errorTypeSo, None) |
1013 |
# taylorFormListSaSo is a Python list of Sollya objects references that |
|
1014 |
# are copies of the elements of taylorFormSo. |
|
1015 |
# pobyso_get_list_elements_so_so clears taylorFormSo. |
|
991 | 1016 |
(taylorFormListSo, numElements, isEndElliptic) = \ |
992 | 1017 |
pobyso_get_list_elements_so_so(taylorFormSo) |
993 | 1018 |
polySo = taylorFormListSo[0] |
... | ... | |
1009 | 1034 |
return((polyVarChangedSo, intervalCenterSo, maxErrorSo)) |
1010 | 1035 |
# end pobyso_taylor_expansion_with_change_var_so_so |
1011 | 1036 |
|
1012 |
def pobyso_taylor_expansion_no_change_var_so_so(functionSo, degreeSo, rangeSo, \
|
|
1013 |
errorTypeSo=None, \
|
|
1037 |
def pobyso_taylor_expansion_no_change_var_so_so(functionSo, degreeSo, rangeSo, |
|
1038 |
errorTypeSo=None, |
|
1014 | 1039 |
sollyaPrecSo=None): |
1015 | 1040 |
""" |
1016 | 1041 |
Compute the Taylor expansion without the variable change |
... | ... | |
1026 | 1051 |
errorTypeSo = sollya_lib_absolute(None) |
1027 | 1052 |
else: |
1028 | 1053 |
errorTypeIsNone = False |
1029 |
intervalCenterSo = sollya_lib_mid(rangeSo) |
|
1030 |
taylorFormSo = sollya_lib_taylorform(functionSo, degreeSo, \
|
|
1031 |
intervalCenterSo, \
|
|
1054 |
intervalCenterSo = sollya_lib_mid(rangeSo, None)
|
|
1055 |
taylorFormSo = sollya_lib_taylorform(functionSo, degreeSo, |
|
1056 |
intervalCenterSo, |
|
1032 | 1057 |
rangeSo, errorTypeSo, None) |
1033 | 1058 |
# taylorFormListSaSo is a Python list of Sollya objects references that |
1034 | 1059 |
# are copies of the elements of taylorFormSo. |
1035 | 1060 |
# pobyso_get_list_elements_so_so clears taylorFormSo. |
1036 | 1061 |
(taylorFormListSaSo, numElementsSa, isEndEllipticSa) = \ |
1037 | 1062 |
pobyso_get_list_elements_so_so(taylorFormSo) |
1063 |
sollya_lib_clear_obj(taylorFormSo) |
|
1038 | 1064 |
polySo = sollya_lib_copy_obj(taylorFormListSaSo[0]) |
1065 |
#polySo = taylorFormListSaSo[0] |
|
1039 | 1066 |
#errorRangeSo = sollya_lib_copy_obj(taylorFormListSaSo[2]) |
1040 |
#polySo = taylorFormListSaSo[0] |
|
1041 | 1067 |
errorRangeSo = taylorFormListSaSo[2] |
1042 | 1068 |
# No copy_obj needed here: a new object is created. |
1043 | 1069 |
maxErrorSo = sollya_lib_sup(errorRangeSo) |
... | ... | |
1047 | 1073 |
sollya_lib_clear_obj(initialPrecSo) |
1048 | 1074 |
if errorTypeIsNone: |
1049 | 1075 |
sollya_lib_clear_obj(errorTypeSo) |
1050 |
for element in taylorFormListSaSo: |
|
1051 |
sollya_lib_clear_obj(element) |
|
1076 |
pobyso_clear_taylorform_sa_so(taylorFormListSaSo) |
|
1052 | 1077 |
return((polySo, intervalCenterSo, maxErrorSo)) |
1053 | 1078 |
# end pobyso_taylor_expansion_no_change_var_so_so |
1054 | 1079 |
|
Formats disponibles : Unified diff