Ejemplo n.º 1
0
def test_expr_in_funccall():
    lems = '''
    <ComponentType>
      <Exposure name="n" dimension="none"/>
      <Requirement name="v" dimension="none"/>
      <Dynamics>
        <StateVariable name="n" dimension="none"/>
        <DerivedVariable name="_aux0" value="(v + 55) / 10"/>
        <ConditionalDerivedVariable name="alpha__aux0">
          <Case condition="fabs(_aux0) .gt. 1e-6"
                value="0.1 * _aux0 / (1 - exp(-_aux0))"/>
          <Case value="0.1 / (1 - 0.5 * _aux0)"/>
        </ConditionalDerivedVariable>
        <TimeDerivative variable="n" value="alpha__aux0"/>
      </Dynamics>
    </ComponentType>'''
    mod = LemsCompTypeGenerator().compile_to_string("""
    PARAMETER {
        v (mV)
    }
    STATE { n }
    FUNCTION alpha(x)(/ms){
        if(fabs(x) > 1e-6){
               alpha=0.1*x/(1-exp(-x))
        }else{
               alpha=0.1/(1-0.5*x)
        }
    }
    DERIVATIVE dn {
        n' = alpha((v + 55)/10)}
    """)
    assert (xml_compare(mod, lems))
Ejemplo n.º 2
0
def test_after_if():
    lems = '''
    <ComponentType>
      <Exposure name="n" dimension="none"/>
      <Requirement name="v" dimension="none"/>
      <Dynamics>
        <StateVariable name="n" dimension="none"/>
        <DerivedVariable name="alpha_v::x" value="(v + 55) / 10"/>
        <ConditionalDerivedVariable name="alpha_v">
          <Case condition="fabs(alpha_v::x) .gt. 1e-6"
                value="0.1 * alpha_v::x / (1 - exp(-alpha_v::x))"/>
          <Case value="0.1 / (1 - 0.5 * alpha_v::x)"/>
        </ConditionalDerivedVariable>
        <TimeDerivative variable="n" value="alpha_v"/>
      </Dynamics>
    </ComponentType>'''

    mod = LemsCompTypeGenerator().compile_to_string("""
    PARAMETER {
        v (mV)
    }
    DERIVATIVE dn { n' = alpha(v)}
    FUNCTION alpha(Vm)(/ms){
        LOCAL x
        x = (Vm + 55) / 10
        if(fabs(x) > 1e-6){
               alpha=0.1*x/(1-exp(-x))
        }else{
               alpha=0.1/(1-0.5*x)
        }
    }
    STATE { n }
    """)
    assert (xml_compare(mod, lems))
Ejemplo n.º 3
0
def test_dx_func():
    lems = '''
    <ComponentType>
      <Exposure name="x" dimension="none"/>
      <Requirement name="v" dimension="none"/>
      <Dynamics>
        <StateVariable name="x" dimension="none"/>
        <DerivedVariable name="f_3" value="2 * 3"/>
        <TimeDerivative value="sin(f_3)" variable="x"/>
      </Dynamics>
    </ComponentType>
    '''

    mod = LemsCompTypeGenerator().compile_to_string('''
        PARAMETER { v }
        STATE { x }
        FUNCTION f(a){f=2*a}
        DERIVATIVE dx {x' = sin(f(3))}
    ''')

    assert (xml_compare(mod, lems))
Ejemplo n.º 4
0
def test_v_scoping():
    lems = '''
    <ComponentType>
      <Exposure name="x" dimension="none"/>
      <Requirement name="v" dimension="none"/>
      <Dynamics>
        <StateVariable name="x" dimension="none"/>
        <DerivedVariable name="f_x" value="-x"/>
        <TimeDerivative value="f_x + v" variable="x"/>
      </Dynamics>
    </ComponentType>
    '''

    mod = LemsCompTypeGenerator().compile_to_string('''
        PARAMETER { v }
        STATE { x }
        FUNCTION f(v){f=-v}
        DERIVATIVE dx {x' = f(x) + v}
    ''')

    assert (xml_compare(mod, lems))
Ejemplo n.º 5
0
def test_double_funccall():
    lems = '''
        <ComponentType>
          <Exposure name="x" dimension="none"/>
          <Requirement name="v" dimension="none"/>
          <Dynamics>
             <StateVariable name="x" dimension="none"/>
             <ConditionalDerivedVariable name="f_v__b">
               <Case condition="v .neq. 0" value="v"/>
               <Case value="1 * v"/>
             </ConditionalDerivedVariable>
             <DerivedVariable name="f_v" value="2 * f_v__b"/>
             <ConditionalDerivedVariable name="f_4__b">
               <Case condition="4 .neq. 0" value="4"/>
               <Case value="1 * 4"/>
             </ConditionalDerivedVariable>
             <DerivedVariable name="f_4" value="2 * f_4__b"/>
             <TimeDerivative value="f_v + f_v - f_4" variable="x"/>
          </Dynamics>
        </ComponentType>
    '''
    # TODO: test expr in func arguments

    mod = LemsCompTypeGenerator().compile_to_string('''
        PARAMETER {
            v(mV)
        }
        STATE { x }
        FUNCTION f(a){
            LOCAL b
            if(a!=0){
                b=a
            } else{
                b=1*a
            }
            f = 2 * b
        }
        DERIVATIVE dx {x' = f(v) + f(v) - f(4)}
    ''')
    assert (xml_compare(mod, lems))
Ejemplo n.º 6
0
def test_scoping_mangling():
    lems = '''
    <ComponentType>
      <Exposure name="n" dimension="none"/>
      <Requirement name="v" dimension="none"/>
      <Dynamics>
        <StateVariable name="n" dimension="none"/>
        <DerivedVariable name="dn::a" value="10"/>
        <DerivedVariable name="_aux0" value="(v + 55) / dn::a"/>
        <DerivedVariable name="alpha__aux0::a" value="0.1"/>
        <ConditionalDerivedVariable name="alpha__aux0">
            <Case condition="fabs(_aux0) .gt. alpha__aux0::a"
                value="alpha__aux0::a * _aux0 / (1 - exp(-_aux0))"/>
            <Case value="alpha__aux0::a / (1 - 0.5 * _aux0)"/>
        </ConditionalDerivedVariable>
        <TimeDerivative variable="n" value="alpha__aux0"/>
      </Dynamics>
    </ComponentType>'''
    mod = LemsCompTypeGenerator().compile_to_string("""
    PARAMETER {
        v (mV)
    }
    STATE { n }
    FUNCTION alpha(x)(/ms){
        LOCAL a
        a = 0.1
        if(fabs(x) > a){
               alpha=a*x/(1-exp(-x))
        }else{
               alpha=a/(1-0.5*x)
        }
    }
    DERIVATIVE dn {
        LOCAL a
        a = 10
        n' = alpha((v + 55)/a)}
    """)
    assert (xml_compare(mod, lems))
Ejemplo n.º 7
0
def test_multiple_call():
    lems = '''
    <ComponentType>
      <Exposure name="n" dimension="none"/>
      <Requirement name="v" dimension="none"/>
      <Dynamics>
        <StateVariable name="n" dimension="none"/>
        <DerivedVariable name="dn::x" value="(v + 55) / 10"/>
        <ConditionalDerivedVariable name="alpha_id_dn::x">
        <Case condition="fabs(id_id_dn::x) .gt. 1e-6"
            value="0.1 * id_dn::x / (1 - exp(-id_dn::x))"/>
            <Case value="0.1 / (1 - 0.5 * id_dn::x)"/>
        </ConditionalDerivedVariable>
        <DerivedVariable name="dn::x" value="(v + 55) / 10"/>
        <DerivedVariable name="id_dn::x" value="dn::x"/>
        <DerivedVariable name="id_id_dn::x" value="id_dn::x"/>
        <TimeDerivative variable="n" value="alpha_id_dn::x"/>
      </Dynamics>
    </ComponentType>'''
    mod = LemsCompTypeGenerator().compile_to_string("""
    PARAMETER {
        v (mV)
    }
    STATE { n }
    FUNCTION id(x){id = x}
    FUNCTION alpha(x)(/ms){
        if(fabs(id(x)) > 1e-6){
               alpha=0.1*x/(1-exp(-x))
        }else{
               alpha=0.1/(1-0.5*x)
        }
    }
    DERIVATIVE dn {
        LOCAL x
        x = (v + 55)/10
        n' = alpha(id(x))}
    """)
    assert (xml_compare(mod, lems))