Beispiel #1
0
def test_properties():
    """
    Test accessing the various properties of equation objects
    """
    tau = 10 * ms
    eqs = Equations("""dv/dt = -(v + I)/ tau : volt
                       I = sin(2 * 22/7. * f * t)* volt : volt
                       f = freq * Hz: Hz
                       freq : 1""")
    assert (len(eqs.diff_eq_expressions) == 1
            and eqs.diff_eq_expressions[0][0] == 'v'
            and isinstance(eqs.diff_eq_expressions[0][1], Expression))
    assert eqs.diff_eq_names == {'v'}
    assert (len(eqs.eq_expressions) == 3
            and {name
                 for name, _ in eqs.eq_expressions} == {'v', 'I', 'f'} and all(
                     (isinstance(expr, Expression)
                      for _, expr in eqs.eq_expressions)))
    assert len(eqs.eq_names) == 3 and eqs.eq_names == {'v', 'I', 'f'}
    assert set(eqs.keys()) == {'v', 'I', 'f', 'freq'}
    # test that the equations object is iterable itself
    assert all((isinstance(eq, SingleEquation) for eq in eqs.values()))
    assert all((isinstance(eq, str) for eq in eqs))
    assert (len(eqs.ordered) == 4 and all(
        (isinstance(eq, SingleEquation) for eq in eqs.ordered))
            and [eq.varname for eq in eqs.ordered] == ['f', 'I', 'v', 'freq'])
    assert [eq.unit for eq in eqs.ordered] == [Hz, volt, volt, 1]
    assert eqs.names == {'v', 'I', 'f', 'freq'}
    assert eqs.parameter_names == {'freq'}
    assert eqs.subexpr_names == {'I', 'f'}
    dimensions = eqs.dimensions
    assert set(dimensions.keys()) == {'v', 'I', 'f', 'freq'}
    assert dimensions['v'] is volt.dim
    assert dimensions['I'] is volt.dim
    assert dimensions['f'] is Hz.dim
    assert dimensions['freq'] is DIMENSIONLESS
    assert eqs.names == set(eqs.dimensions.keys())
    assert eqs.identifiers == {'tau', 'volt', 'Hz', 'sin', 't'}

    # stochastic equations
    assert len(eqs.stochastic_variables) == 0
    assert eqs.stochastic_type is None

    eqs = Equations("""dv/dt = -v / tau + 0.1*second**-.5*xi : 1""")
    assert eqs.stochastic_variables == {'xi'}
    assert eqs.stochastic_type == 'additive'

    eqs = Equations(
        """dv/dt = -v / tau + 0.1*second**-.5*xi_1 +  0.1*second**-.5*xi_2: 1"""
    )
    assert eqs.stochastic_variables == {'xi_1', 'xi_2'}
    assert eqs.stochastic_type == 'additive'

    eqs = Equations("""dv/dt = -v / tau + 0.1*second**-1.5*xi*t : 1""")
    assert eqs.stochastic_type == 'multiplicative'

    eqs = Equations("""dv/dt = -v / tau + 0.1*second**-1.5*xi*v : 1""")
    assert eqs.stochastic_type == 'multiplicative'
Beispiel #2
0
def test_str_repr():
    """
    Test the string representation (only that it does not throw errors).
    """
    tau = 10 * ms
    eqs = Equations("""dv/dt = -(v + I)/ tau : volt (unless refractory)
                       I = sin(2 * 22/7. * f * t)* volt : volt
                       f : Hz""")
    assert len(str(eqs)) > 0
    assert len(repr(eqs)) > 0

    # Test str and repr of SingleEquations explicitly (might already have been
    # called by Equations
    for eq in eqs.values():
        assert (len(str(eq))) > 0
        assert (len(repr(eq))) > 0