
    void {{class_name}}::EvaluateYDerivatives(double {{free_variable.var_name}}, const {{vector_decl}} rY, {{vector_decl}} rDY)
    {
        // Inputs:
        // Time units: millisecond
        {%- for state_var in state_vars %}
        {% if state_var.in_y_deriv %}double {{ state_var.var }} = {{state_var.rY_lookup}};
        // Units: {{state_var.units}}; Initial value: {{state_var.initial_value}}
        {%- endif %}{%- endfor %}
{% set method =  "EvaluateYDerivatives" %}{% include "Shared/cpp/lookup_table_init" %}
        // Mathematics
        {% for deriv in y_derivative_equations %}{%- if deriv.is_voltage%}double {{deriv.lhs}};{%- endif %}{%- endfor %}
        {%- for deriv in y_derivative_equations %}{%- if deriv.in_eqs_excl_voltage %}
        const double {{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}}{%- endif %}
        {%- endfor %}

        if (mSetVoltageDerivativeToZero)
        {
            {% for deriv in y_derivative_equations %}{%- if deriv.is_voltage%}{{deriv.lhs}} = 0.0;{%- endif %}{%- endfor %}
        }
        else
        {
        {% for deriv in y_derivative_equations %}{% if not deriv.in_eqs_excl_voltage %}{% if deriv.is_data_clamp_current is defined and deriv.is_data_clamp_current %}    // Special handling of data clamp current here
            // (we want to save expense of calling the interpolation method if possible.)
            double {{ deriv.lhs }} = 0.0;
            if (mDataClampIsOn)
            {
                {{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}}
            }{% else %}    {% if not deriv.is_voltage%}const double {% endif %}{{deriv.lhs}} = {{deriv.rhs}}; // {{deriv.units}}{% endif %}
        {% endif %}{%- endfor %}}
        {% for deriv in y_derivatives %}
        {% if  is_cvode is defined and is_cvode %}NV_Ith_S(rDY,{{loop.index0}}){% else %}rDY[{{loop.index0}}]{%endif%} = {{deriv}};
        {%- endfor %}
    }