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