Révision 215 pobysoPythonSage/src/pobyso.py
pobyso.py (revision 215) | ||
---|---|---|
130 | 130 |
return rangeSo |
131 | 131 |
# End pobyso_bounds_to_range_sa_so |
132 | 132 |
|
133 |
def pobyso_build_end_elliptic_list_so_so(*args): |
|
134 |
""" |
|
135 |
From argumrny Sollya objects, create a Sollya end elliptic list. |
|
136 |
Elements of the list are "eaten" (should not be cleared individualy, |
|
137 |
are cleared when the list is cleared). |
|
138 |
""" |
|
139 |
if len(args) == 0: |
|
140 |
## Called with an empty list produced "error". |
|
141 |
return sollya_lib_build_end_elliptic_list(None) |
|
142 |
index = 0 |
|
143 |
## One can not append elements to an elliptic list, prepend only is |
|
144 |
# permitted. |
|
145 |
for argument in reversed(args): |
|
146 |
if index == 0: |
|
147 |
listSo = sollya_lib_build_end_elliptic_list(argument, None) |
|
148 |
else: |
|
149 |
listSo = sollya_lib_prepend(argument, listSo) |
|
150 |
index += 1 |
|
151 |
return listSo |
|
152 |
|
|
153 |
# End pobyso_build_end_elliptic_list_so_so |
|
154 |
|
|
133 | 155 |
def pobyso_build_function_sub_so_so(exp1So, exp2So): |
134 | 156 |
return(sollya_lib_build_function_sub(exp1So, exp2So)) |
135 | 157 |
|
... | ... | |
222 | 244 |
return(imageIntervalSa) |
223 | 245 |
# End pobyso_compute_pos_function_abs_val_bounds_sa_sa |
224 | 246 |
|
247 |
def pobyso_compute_precision_decay_ratio_function_sa_so(): |
|
248 |
""" |
|
249 |
Compute the precision decay ratio function for polynomial |
|
250 |
coefficient progressive trucation. |
|
251 |
""" |
|
252 |
functionText = """ |
|
253 |
proc(deg, a, b, we, wq) |
|
254 |
{ |
|
255 |
k = we * (exp(x/a)-1) + wq * (b*x)^2 + (1-we-wq) * x; |
|
256 |
return k/k(d); |
|
257 |
}; |
|
258 |
""" |
|
259 |
return pobyso_parse_string_sa_so(functionText) |
|
260 |
# End pobyso_compute_precision_decay_ratio_function. |
|
261 |
|
|
262 |
|
|
225 | 263 |
def pobyso_constant(rnArg): |
226 | 264 |
""" Legacy function. See pobyso_constant_sa_so. """ |
227 | 265 |
return(pobyso_constant_sa_so(rnArg)) |
... | ... | |
247 | 285 |
""" |
248 | 286 |
Obvious. |
249 | 287 |
""" |
250 |
return(pobyso_constant_from_int_sa_so(0))
|
|
288 |
return pobyso_constant_from_int_sa_so(0)
|
|
251 | 289 |
|
252 | 290 |
def pobyso_constant_1(): |
253 | 291 |
""" |
254 | 292 |
Obvious. |
255 | 293 |
Legacy function. See pobyso_constant_so_so. |
256 | 294 |
""" |
257 |
return(pobyso_constant_1_sa_so())
|
|
295 |
return pobyso_constant_1_sa_so()
|
|
258 | 296 |
|
259 | 297 |
def pobyso_constant_1_sa_so(): |
260 | 298 |
""" |
... | ... | |
264 | 302 |
|
265 | 303 |
def pobyso_constant_from_int(anInt): |
266 | 304 |
""" Legacy function. See pobyso_constant_from_int_sa_so. """ |
267 |
return(pobyso_constant_from_int_sa_so(anInt))
|
|
305 |
return pobyso_constant_from_int_sa_so(anInt)
|
|
268 | 306 |
|
269 | 307 |
def pobyso_constant_from_int_sa_so(anInt): |
270 | 308 |
""" |
271 | 309 |
Get a Sollya constant from a Sage int. |
272 | 310 |
""" |
273 |
return(sollya_lib_constant_from_int64(long(anInt)))
|
|
311 |
return sollya_lib_constant_from_int64(long(anInt))
|
|
274 | 312 |
|
275 | 313 |
def pobyso_constant_from_int_so_sa(constSo): |
276 | 314 |
""" |
... | ... | |
279 | 317 |
""" |
280 | 318 |
constSa = c_long(0) |
281 | 319 |
sollya_lib_get_constant_as_int64(byref(constSa), constSo) |
282 |
return(constSa.value)
|
|
320 |
return constSa.value
|
|
283 | 321 |
# End pobyso_constant_from_int_so_sa |
284 | 322 |
|
285 | 323 |
def pobyso_constant_from_mpq_sa_so(rationalSa): |
... | ... | |
304 | 342 |
currentSollyaPrecSa = pobyso_get_prec_so_sa() |
305 | 343 |
return pobyso_constant_sa_so(rnArgSa, currentSollyaPrecSa) |
306 | 344 |
# End pobyso_constant_sollya_prec_sa_so |
307 |
|
|
345 |
|
|
346 |
def pobyso_end_elliptic_list_so_sa_so(objectsListSo, intCountSa): |
|
347 |
""" |
|
348 |
Create a Sollya end elliptic list made of the objectListSo[0] to |
|
349 |
objectsListSo[intCountSa-1] objects. |
|
350 |
""" |
|
351 |
return sollya_lib_end_elliptic_list(objectSo, int(intCountSa)) |
|
352 |
|
|
308 | 353 |
def pobyso_error_so(): |
309 | 354 |
return sollya_lib_error(None) |
310 | 355 |
# End pobyso_error(). |
311 | 356 |
|
357 |
def pobyso_evaluate_so_so(funcSo, argumentSo): |
|
358 |
""" |
|
359 |
Evaluates funcSo for arguemntSo through sollya_lib_evaluate(). |
|
360 |
""" |
|
361 |
return sollya_lib_evaluate(funcSo, argumentSo) |
|
362 |
# End pobyso_evaluate_so_so. |
|
363 |
|
|
312 | 364 |
def pobyso_float_poly_sa_so(polySa, precSa = None): |
313 | 365 |
""" |
314 | 366 |
Create a Sollya polynomial from a Sage RealField polynomial. |
... | ... | |
367 | 419 |
""" |
368 | 420 |
if realFieldSa is None: |
369 | 421 |
expressionPrecSa = pobyso_get_max_prec_of_exp_so_sa(polySo) |
422 |
print "Maximum precision of Sollya polynomial coefficients:", expressionPrecSa |
|
370 | 423 |
realFieldSa = RealField(expressionPrecSa) |
371 | 424 |
#print "Sollya expression before...", |
372 | 425 |
#pobyso_autoprint(polySo) |
... | ... | |
380 | 433 |
#print polyRingSa |
381 | 434 |
# Do not use the polynomial(expressionSa, ring=polyRingSa) form! |
382 | 435 |
polynomialSa = polyRingSa(expressionSa) |
436 |
polyCoeffsListSa = polynomialSa.coefficients() |
|
437 |
#for coeff in polyCoeffsListSa: |
|
438 |
# print coeff.abs().n() |
|
383 | 439 |
return polynomialSa |
384 | 440 |
# End pobyso_float_poly_so_sa |
385 | 441 |
|
442 |
def pobyso_free_variable(): |
|
443 |
""" |
|
444 |
Ultra thin wrapper around the sollya_lib_function_build_free_variable function. |
|
445 |
""" |
|
446 |
return sollya_lib_build_function_free_variable() |
|
386 | 447 |
|
387 | 448 |
def pobyso_function_type_as_string(funcType): |
388 | 449 |
""" Legacy function. See pobyso_function_type_as_string_so_sa. """ |
... | ... | |
969 | 1030 |
return int(degreeIntervalSa.upper()) |
970 | 1031 |
# End pobyso_guess_degree_so_sa |
971 | 1032 |
|
1033 |
def pobyso_inf_so_so(intervalSo): |
|
1034 |
""" |
|
1035 |
Very thin wrapper around sollya_lib_inf(). |
|
1036 |
""" |
|
1037 |
return sollya_lib_inf(intervalSo) |
|
1038 |
# End pobyso_inf_so_so. |
|
1039 |
|
|
972 | 1040 |
def pobyso_infnorm_so_so(func, interval, file = None, intervalList = None): |
973 | 1041 |
print "Do not use this function. User pobyso_supnorm_so_so instead." |
974 | 1042 |
return None |
... | ... | |
1045 | 1113 |
sollya_lib_clear_obj(precisionSo) |
1046 | 1114 |
return precisionSa |
1047 | 1115 |
# End pobyso_precision_so_sa |
1116 |
|
|
1117 |
def pobyso_polynomial_coefficients_progressive_truncate_so_so(polySo, |
|
1118 |
funcSo, |
|
1119 |
icSo, |
|
1120 |
intervalSo, |
|
1121 |
itpSo, |
|
1122 |
ftpSo, |
|
1123 |
maxPrecSo, |
|
1124 |
maxErrSo): |
|
1125 |
print "Input arguments:" |
|
1126 |
pobyso_autoprint(polySo) |
|
1127 |
pobyso_autoprint(funcSo) |
|
1128 |
pobyso_autoprint(icSo) |
|
1129 |
pobyso_autoprint(intervalSo) |
|
1130 |
pobyso_autoprint(itpSo) |
|
1131 |
pobyso_autoprint(ftpSo) |
|
1132 |
pobyso_autoprint(maxPrecSo) |
|
1133 |
pobyso_autoprint(maxErrSo) |
|
1134 |
print "________________" |
|
1048 | 1135 |
|
1136 |
precDecayFuncSo = \ |
|
1137 |
pobyso_parse_string("3/8*(exp(x/2.2)-1) + 2/8*(2*x)^2 + (1-3/8-2/8)*x") |
|
1138 |
pobyso_autoprint(precDecayFuncSo) |
|
1139 |
return None |
|
1140 |
|
|
1049 | 1141 |
def pobyso_range(rnLowerBound, rnUpperBound): |
1050 | 1142 |
""" Legacy function. See pobyso_range_sa_so. """ |
1051 | 1143 |
return pobyso_range_sa_so(rnLowerBound, rnUpperBound) |
... | ... | |
1223 | 1315 |
return(sollya_lib_remez(funcSo, degreeSo, rangeSo, weightSo, qualitySo, None)) |
1224 | 1316 |
# End pobyso_remez_canonical_so_so. |
1225 | 1317 |
|
1318 |
def pobyso_round_coefficients_single_so_so(polySo, precSo): |
|
1319 |
""" |
|
1320 |
Create a rounded coefficients polynomial from polynomial argument to |
|
1321 |
the number of bits in size argument. |
|
1322 |
All coefficients are set to the same precision. |
|
1323 |
""" |
|
1324 |
## TODO: check arguments. |
|
1325 |
endEllipListSo = pobyso_build_end_elliptic_list_so_so(precSo) |
|
1326 |
polySo = sollya_lib_roundcoefficients(polySo, endEllipListSo, None) |
|
1327 |
#sollya_lib_clear_obj(endEllipListSo) |
|
1328 |
return polySo |
|
1329 |
|
|
1330 |
# End pobyso_round_coefficients_single_so_so |
|
1331 |
|
|
1226 | 1332 |
def pobyso_set_canonical_off(): |
1227 | 1333 |
sollya_lib_set_canonical(sollya_lib_off()) |
1228 | 1334 |
|
... | ... | |
1237 | 1343 |
a = c_int(p) |
1238 | 1344 |
precSo = c_void_p(sollya_lib_constant_from_int(a)) |
1239 | 1345 |
sollya_lib_set_prec(precSo, None) |
1346 |
# End pobyso_set_prec_sa_so. |
|
1240 | 1347 |
|
1241 | 1348 |
def pobyso_set_prec_so_so(newPrecSo): |
1242 | 1349 |
sollya_lib_set_prec(newPrecSo, None) |
1350 |
# End pobyso_set_prec_so_so. |
|
1243 | 1351 |
|
1352 |
def pobyso_inf_so_so(intervalSo): |
|
1353 |
""" |
|
1354 |
Very thin wrapper around sollya_lib_inf(). |
|
1355 |
""" |
|
1356 |
return sollya_lib_inf(intervalSo) |
|
1357 |
# End pobyso_inf_so_so. |
|
1358 |
|
|
1244 | 1359 |
def pobyso_supnorm_so_so(polySo, funcSo, intervalSo, errorTypeSo = None,\ |
1245 | 1360 |
accuracySo = None): |
1246 | 1361 |
""" |
... | ... | |
1500 | 1615 |
intervalSo, errorTypeSo, None) |
1501 | 1616 |
if createdErrorType: |
1502 | 1617 |
sollya_lib_clear_obj(errorTypeSo) |
1503 |
return(resultSo)
|
|
1618 |
return resultSo
|
|
1504 | 1619 |
|
1505 | 1620 |
|
1506 | 1621 |
def pobyso_univar_polynomial_print_reverse(polySa): |
Formats disponibles : Unified diff