テスト目的で、既存のクラスにコードを追加しています。通常、このクラスはeigensystem_CUDA_implementation
、その親のいくつかの関数と属性に依存しています。このクラスがプログラムの他の部分とは独立してインポートされる場合、通常の親クラスをtestParentクラスに置き換えたいと思います。
これがコードをテストするための悪い方法であり、これをまったく別の方法で行う必要がある場合、私はその提案を受け入れます。
eigensystem_CUDA_implementation
オブジェクトを初期化するときのエラーは次のとおりです。
NameError:スコープを囲む際に割り当ての前に参照される自由変数'np'
ラインにさかのぼりますself.mat = np.matrix(...
表示されていない点で、NumPyとpyCUDAに依存するものは他にもたくさんありeigensystem_CUDA_implementation
ます。クラスは、依存するモジュールをインポートできますか?最初のエラーのため、これはまだテストされていません。
class eigensystem_CUDA_implementation:
def __init__(self, parent = None, max_time = 60, delta = 10**(-32)):
# For testing purposes, when class is utilized independently
if(not parent):
# testing mode
if(not sys.modules.has_key("numpy")):
import numpy as np
import pycuda.driver as cuda
import pycuda.autoinit
from pycuda.compiler import SourceModule
class testParent:
def __init__(self, size = 10):
self.size = size
self.delta = 10**(-32)
self.num_site_types = 8
self.mat = np.matrix(np.random.random((self.size,self.size)).astype(np.float64))
def get_mutation_selection_matrix(self, alpha):
return self.mat
...
潜在的な問題の1つnot sys.modules.has_key("numpy")
は、「np」という名前か他の名前かを問わず、NumPyがインポートされたものとして表示されることです。ただし、コードの残りの部分では「np」を使用しているため、これは無視しています。
提案をありがとう