2015-12-21 3 views
0

У меня есть компонент, который имеет вход, который является int, поэтому я устанавливаю pass_by_obj = True. Однако, когда я проверяю производные check_partial_derivatives(), он выдает эту ошибку:Проверьте частичные производные с pass_by_obj

data = prob.check_partial_derivatives(out_stream=sys.stdout) 
    File "/usr/local/lib/python2.7/site-packages/openmdao/core/problem.py", line 1711, in check_partial_derivatives 
    jac_rev[(u_name, p_name)][idx, :] = dinputs._dat[p_name].val 
TypeError: float() argument must be a string or a number 

Это, как представляется, пытается взять производную даже если он не может. Вот простой пример:

import sys 
from openmdao.api import IndepVarComp, Problem, Group, Component 

class Comp(Component): 
    def __init__(self): 
     super(Comp, self).__init__() 
     self.add_param('x', val=0.0) 
     self.add_param('y', val=3, pass_by_obj=True) 
     self.add_output('z', val=0.0) 

    def solve_nonlinear(self, params, unknowns, resids): 
     unknowns['z'] = params['y']*params['x'] 

    def linearize(self, params, unknowns, resids): 
     J = {} 
     J['z', 'x'] = params['y'] 
     return J 

prob = Problem() 
prob.root = Group() 
prob.root.add('comp', Comp(), promotes=['*']) 
prob.root.add('p1', IndepVarComp('x', 0.0), promotes=['x']) 
prob.root.add('p2', IndepVarComp('y', 3, pass_by_obj=True), promotes=['y']) 

prob.setup(check=False) 
prob['x'] = 2.0 
prob['y'] = 3 

prob.run() 
print prob['z'] 

data = prob.check_partial_derivatives(out_stream=sys.stdout) 

можно использовать() метод check_partial_derivatives с компонентами, которые имеют входы, которые указаны в качестве pass_by_obj? Мне не нужны производные для входов, которые указаны как pass_by_obj, но я забочусь о других входах.

+0

это почти наверняка ошибка в коде. Мы исправим его как можно быстрее и дадим вам знать, когда он больше не сломается. –

ответ

2

Спасибо за отчет и тест. Это была ошибка, в которой мы не исключали конструктивные переменные, объявленные pass_by_obj. У меня есть запрос на растяжение в репозитории OpenMDAO с исправлением. Вероятно, он будет объединен, чтобы овладеть в течение дня.

EDIT - исправление объединено. https://github.com/OpenMDAO/OpenMDAO/commit/b123b284e46aac7e15fa9bce3751f9ad9bb63b95