#ifndef _TERM_H_
#define _TERM_H_
#ifndef _MONO_H_
#error "Need to include mono.h before term.h"
#endif
#ifdef __cplusplus
extern "C" {
#endif
typedef struct term Term;
extern Term* term_new(int size) returns_NONNULL;
extern void term_add_elem(Term* term, Entry const* entry, Numb const* coeff, MFun mfun) expects_NONNULL;
#if 0 extern void term_mul_elem(Term* term, Entry const* entry, Numb const* coeff) expects_NONNULL;
#endif
extern void term_free(Term* term) expects_NONNULL;
extern bool term_is_valid(Term const* term) is_PURE;
extern Term* term_copy(Term const* term) expects_NONNULL returns_NONNULL;
extern void term_print(FILE* fp, Term const* term, bool print_symbol_index) expects_NONNULL;
extern void term_append_elem(Term* term, Mono* mono) expects_NONNULL;
extern void term_append_term(Term* term_a, Term const* term_b) expects_NONNULL;
extern Term* term_add_term(Term const* term_a, Term const* term_b) expects_NONNULL returns_NONNULL;
extern Term* term_sub_term(Term const* term_a, Term const* term_b) expects_NONNULL returns_NONNULL;
extern Term* term_mul_term(Term const* term_a, Term const* term_b) expects_NONNULL returns_NONNULL;
extern Term* term_simplify(Term const* term_org) expects_NONNULL returns_NONNULL;
extern void term_add_constant(Term* term, Numb const* value) expects_NONNULL;
extern void term_sub_constant(Term* term, Numb const* value) expects_NONNULL;
extern void term_mul_coeff(Term* term, Numb const* value) expects_NONNULL;
extern Numb const* term_get_constant(Term const* term) expects_NONNULL returns_NONNULL;
#if 0#endif
extern void term_to_objective(Term const* term) expects_NONNULL;
extern int term_get_elements(Term const* term) expects_NONNULL is_PURE;
extern Mono* term_get_element(Term const* term, int i) expects_NONNULL returns_NONNULL is_PURE;
extern Bound* term_get_lower_bound(Term const* term) expects_NONNULL returns_NONNULL;
extern Bound* term_get_upper_bound(Term const* term) expects_NONNULL returns_NONNULL;
extern bool term_is_all_integer(Term const* term) expects_NONNULL;
extern bool term_is_linear(Term const* term) expects_NONNULL is_PURE;
extern bool term_is_polynomial(Term const* term) expects_NONNULL is_PURE;
extern bool term_has_realfunction(Term const* term) expects_NONNULL is_PURE;
extern int term_get_degree(Term const* term) expects_NONNULL is_PURE;
extern Term* term_make_conditional(Term const* ind_term, Term const* cond_term, bool is_true) expects_NONNULL returns_NONNULL;
#ifdef __cplusplus
}
#endif
#endif