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'
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 set([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.itervalues())) assert all((isinstance(eq, basestring) 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 eqs.names == {'v', 'I', 'f', 'freq'} assert eqs.parameter_names == {'freq'} assert eqs.subexpr_names == {'I', 'f'} units = eqs.units assert set(units.keys()) == {'v', 'I', 'f', 'freq'} assert units['v'] == volt assert units['I'] == volt assert units['f'] == Hz assert have_same_dimensions(units['freq'], 1) assert eqs.names == set(eqs.units.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'
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 set([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.itervalues())) assert all((isinstance(eq, basestring) 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'