前提
pythonのコードを高速化するためにlineprofilerを試してみたのですが、実行するとprof.runcallのところでエラーが出てしまいます。解決方法を教えていただきたいです。
実現したいこと
lineprofilerを実行する
発生している問題・エラーメッセージ
エラーメッセージ TypeError Traceback (most recent call last) Input In [6], in <cell line: 102>() 100 prof = LineProfiler() 101 prof.add_function(initial(dt, T1, x10_i, x20_i, y10_i, y20_i, k, gamma, σ)) --> 102 prof.runcall(initial(dt, T1, x10_i, x20_i, y10_i, y20_i, k, gamma, σ)) 103 prof.print_stats() File ~\aa\lib\site-packages\line_profiler\line_profiler.py:170, in LineProfiler.runcall(self, func, *args, **kw) 168 self.enable_by_count() 169 try: --> 170 return func(*args, **kw) 171 finally: 172 self.disable_by_count() TypeError: 'tuple' object is not callable ### 該当のソースコード ```ここに言語名を入力 ソースコード from line_profiler import LineProfiler import numpy as np kBT = 4.14E-21 # (J = kg m^2 / s^2) def initial(dt, T1, x10_i, x20_i, y10_i, y20_i, k, gamma, σ): # 時間刻み dt で T だけ計算 def potential_i(t,X,Y): U=-1E-25/((2*np.pi)**(1/2)*σ)*(1/2)*(np.exp(-((X**2+Y**2)**(1/2)-μ)**2/(2*σ**2))+np.exp(-((X**2+Y**2)**(1/2))**2/(2*σ**2))-np.exp(-(X**2+(Y-a)**2)/(2*σ**2))-np.exp(-(X**2+(Y+a)**2)/(2*σ**2))) return U n1 = int(T1 / dt) # ステップ数 w = np.sqrt(2*kBT*dt/gamma) # ルートの中にdtを入れる r1 = np.random.standard_normal(size = n1 - 1) # n-1個の正規乱数(平均0, 分散1)を発生. r2 = np.random.standard_normal(size = n1 - 1) r3 = np.random.standard_normal(size = n1 - 1) r4 = np.random.standard_normal(size = n1 - 1) x1 = np.zeros(n1) x1[0] = x10_i # m, 初期位置 y1 = np.zeros(n1) y1[0] = y10_i x2 = np.zeros(n1) x2[0] = x20_i y2 = np.zeros(n1) y2[0] = y20_i t = np.linspace(0, T1 - dt, n1) Win=0 Qin=0 for i in range(n1-1): R1=(x1[i]**2+y1[i]**2)**(1/2) R2=(x2[i]**2+y2[i]**2)**(1/2) E01=np.exp(-(R1**2)/(S)) E02=np.exp(-(R2**2)/(S)) E1=np.exp(-((R1**2)**(1/2)-μ)**2/(S)) E2=np.exp(-((R2**2)**(1/2)-μ)**2/(S)) Ea11=np.exp(-(x1[i]**2+(y1[i]-a)**2)/(S)) Ea12=np.exp(-(x1[i]**2+(y1[i]+a)**2)/(S)) Ea21=np.exp(-(x2[i]**2+(y2[i]-a)**2)/(S)) Ea22=np.exp(-(x2[i]**2+(y2[i]+a)**2)/(S)) Efc0=np.exp(-δ*((x1[i]-x2[i])**2 + (y1[i]-y2[i])**2)**0.5)/((x1[i]-x2[i])**2 + (y1[i]-y2[i])**2)**1.0 Efc=np.exp(-δ*((x2[i]-x1[i])**2 + (y2[i]-y1[i])**2)**0.5)/((x2[i]-x1[i])**2 + (y2[i]-y1[i])**2)**1.5 fx1 = -1E-25/((2*np.pi)**(1/2)*σ**3)*A*x1[i]*((R1-μ)/(R1)*E1+E01-Ea11-Ea12) fcx1 = 1.0*(x1[i]-x2[i])*k*δ*Efc0 + 1.0*(x1[i]-x2[i])*k*Efc x1[i + 1] = x1[i] + dt * (fx1 + fcx1) / gamma + w * r1[i] fy1 = -1E-25/((2*np.pi)**(1/2)*σ**3)*A*y1[i]*((R1-μ)/(R1)*E1+E01-(y1[i]-a)/y1[i]*Ea11-(y1[i]+a)/y1[i]*Ea12) fcy1 = 1.0*(y1[i]-y2[i])*k*δ*Efc0 + 1.0*(y1[i]-y2[i])*k*Efc y1[i + 1] = y1[i] + dt * (fy1 + fcy1) / gamma + w * r2[i] fx2 = -1E-25/((2*np.pi)**(1/2)*σ**3)*A*x2[i]*((R2-μ)/(R2)*E2+E02-Ea21-Ea22) fcx2 = 1.0*(x2[i]-x1[i])*k*δ*Efc0 + 1.0*(x2[i]-x1[i])*k*Efc x2[i + 1] = x2[i] + dt * (fx2 + fcx2) / gamma + w * r3[i] fy2 = -1E-25/((2*np.pi)**(1/2)*σ**3)*A*y2[i]*((R2-μ)/(R2)*E2+E02-(y2[i]-a)/y2[i]*Ea21-(y2[i]+a)/y2[i]*Ea22) fcy2 = 1.0*(y2[i]-y1[i])*k*δ*Efc0 + 1.0*(y2[i]-y1[i])*k*Efc y2[i + 1] = y2[i] + dt * (fy2 + fcy2) / gamma + w * r4[i] U0W = potential_i(t[i],x2[i],y2[i]) U1W = potential_i(t[i+1],x2[i],y2[i]) Wi = U1W-U0W Win += Wi U0Q = potential_i(t[i+1],x2[i],y2[i]) U1Q = potential_i(t[i+1],x2[i+1],y2[i+1]) Qi = U1Q-U0Q Qin += Qi global x10_m, x20_m, y10_m, y20_m x10_m = x1[n1-2] y10_m = y1[n1-2] x20_m = x2[n1-2] y20_m = y2[n1-2] return t, x1, x2, y1, y2, Win, Qin η = 0.890E-3 #(Pa*s) r = 0.25E-6 # (m) gamma = 6*np.pi*η*r # (kg/s) D = kBT/gamma tau = 0.1 # (s) トラップの時定数 k = 5E-20 δ=1E7 T1 = 0.1 # (s) 計算時間 T2 = 0.5 T3 = 1 T4 = 11 T5 = 0.5 Tc = T1+T2+T3+T4+T5 dt = 0.5E-3 # (s) 計算の時間刻み σ=1/6*1E-6 S=2*σ**2 μ=1.5E-6 a=1.5E-6 b=0.5E-6 c=0.5E-6 c0=0.5E-6 e=20 m=0 f=1/4 f2=2 f3=2 A=1/2 x10_i = 1.5E-6 # (m) 初期位置.少し離れたところからスタートして,緩和の様子を見てみる. x20_i = 1E-9 y10_i = 1E-9 y20_i= 1E-9 arg0=0 prof = LineProfiler() prof.add_function(initial(dt, T1, x10_i, x20_i, y10_i, y20_i, k, gamma, σ)) prof.runcall(initial(dt, T1, x10_i, x20_i, y10_i, y20_i, k, gamma, σ)) prof.print_stats() ### 試したこと ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
0 コメント