2017-11-15 1 views
0

Ich verwende py_tsg, um den Sparse-Grid-Generator Tasmanian (in C++ geschrieben) von Python aus aufzurufen. Die py_tsg Website zeigt an, dass ich PyUblas und Boost.Python als Voraussetzungen benötige. Ich habe das alles eingerichtet und führe das erste Beispielproblem durch, um sicherzustellen, dass alles koscher ist (auf dem gleichen py_tsg Link, der vorher gegeben wurde).Zugriff auf Tasmanian Sparse Grid von Python mit PyUblas, Boost.Python und py_tsg. Typenkonflikt in Argumenten für make_global_grid

Also scheint alles in Ordnung zu sein, außer einer Sache ... ein Typ stimmt nicht überein zwischen einem der Argumente in der Tasmanian Grid-Methode: make_global_grid. Insbesondere übergibt Python ein numpy.darray von ints an einen pyublas :: numpy_vector und der Interpreter mag es nicht.

Hier ist die Quelle:

import scipy, scipy.integrate, itertools 
import pyublas 
import _py_tsg as tsg 

grid = tsg.TSG() 
def fn1(x):  return scipy.exp(-x[0]*x[0])*scipy.cos(x[1]) 
dimension = 2 
outputs = 0 
level = 7 
grid.make_global_grid(dimension, outputs, level, tsg.TypeDepth.type_level, tsg.TypeOneDRule.rule_clenshawcurtis, scipy.array([], dtype=int), 0.0, 0.0) 
points = grid.get_points() 
weights = grid.get_weights() 
sum = scipy.sum([w*fn1(x) for (x,w) in zip(points, weights)]) 
print("\nExample 1") 
print("grid has: %d points" % grid.get_num_points()) 
print("integral is: %.17f" % sum) 
print("error: %.17f" % scipy.fabs(sum - 2.513723354063905e+00)) 

Und der Stack-Trace: Boost.Python.ArgumentError: Python Argumenttypen in TSG.make_global_grid (TSG, int, int, int, TypeDepth, TypeOneDRule, numpy. ndarray, float, float) nicht C++ Signatur entsprechen: make_global_grid (TSG_Wrap {L-Wert}, int, int, int, TasGrid :: TypeDepth, TasGrid :: TypeOneDRule, pyublas :: numpy_vector, double, double)

Antwort

0

Ich entdeckte, dass Tasmanian ihrer C++ - Bibliothek einen Python-Wrapper zur Verfügung stellt ry in Version 4.0 oder höher. Wenn Sie auf ein ähnliches Problem stoßen, überprüfen Sie die Tasmanische Dokumentation und verwenden Sie TSG 4.0 oder höher ...