def add_extra_signatures(res):
    """
    Adds signatures not defined in the stan language that can still accept
     expression types.
    """
    res.extend([
        # internal math functions
        "vector unit_vector_constrain(vector)",
        "vector unit_vector_constrain(vector, real)",
        "vector unit_vector_free(vector)",
        "vector positive_ordered_constrain(vector)",
        "vector positive_ordered_constrain(vector, real)",
        "vector positive_ordered_free(vector)",
        "vector ordered_constrain(vector)",
        "vector ordered_constrain(vector, real)",
        "vector ordered_free(vector)",
        "vector simplex_constrain(vector)",
        "vector simplex_constrain(vector, real)",
        "vector simplex_free(vector)",
        "int is_cholesky_factor(matrix)",
        "int is_cholesky_factor_corr(matrix)",
        "int is_column_index(matrix, int)",
        "int is_column_index(vector, int)",
        "int is_corr_matrix(matrix)",
        "int is_cholesky_factor(matrix)",
        "int is_lower_triangular(matrix)",
        "int is_mat_finite(matrix)",
        "int is_mat_finite(vector)",
        "int is_matching_dims(matrix, matrix)",
        "int is_matching_dims(vector, matrix)",
        "int is_matching_dims(matrix, vector)",
        "int is_matching_dims(row_vector, matrix)",
        "int is_matching_dims(matrix, row_vector)",
        "int is_matching_dims(matrix, matrix)",
        "int is_matching_dims(row_vector, row_vector)",
        "int is_matching_dims(vector, row_vector)",
        "int is_matching_dims(row_vector, vector)",
        "int is_matching_dims(vector, vector)",
        "int is_pos_definite(matrix)",
        "int is_square(matrix)",
        "int is_square(vector)",
        "int is_square(row_vector)",
        "int is_symmetric(matrix)",
        "int is_unit_vector(vector)",
        #variadic functions: these are tested with one vector for variadic args
        "real[,] ode_adams((real, vector, ostream_ptr, vector) => vector, vector, real, real[], ostream_ptr, vector)",
        "real[,] ode_adams_tol((real, vector, ostream_ptr, vector) => vector, vector, real, real[], real, real, real, ostream_ptr, vector)",
        "real[,] ode_bdf((real, vector, ostream_ptr, vector) => vector, vector, real, real[], ostream_ptr, vector)",
        "real[,] ode_bdf_tol((real, vector, ostream_ptr, vector) => vector, vector, real, real[], real, real, real, ostream_ptr, vector)",
        "real[,] ode_rk45((real, vector, ostream_ptr, vector) => vector, vector, real, real[], ostream_ptr, vector)",
        "real[,] ode_rk45_tol((real, vector, ostream_ptr, vector) => vector, vector, real, real[], real, real, real, ostream_ptr, vector)",
        "real reduce_sum(real[], int, vector)",
		])
    return res