@staticmethod
def derivative_at(sub_expr1, var, val_dict, order=1):
    """
        calculate 1st derivative of var using forward mode
    
        INPUTS
        =======
        sub_expr1: expression whose components include var(or itself be to var)
        val_dict: a dictionary containing variable name and values.
        var: variable of interest
        order: default to 1, set to 2 if 2nd derivative is desired
        
        RETURNS
        ========
        derivative of var with respect to sub_expr1
        """
    x = sub_expr1.evaluation_at(val_dict)
    d = 1 / (1 + x ** 2)
    if order == 1:
        return sub_expr1.derivative_at(var, val_dict) * d
    else:
        raise NotImplementedError(
            'higher order derivatives not implemented for arctan.')
